tidb优化器选取索引有问题怎么办?

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0
  • 【问题描述】:
    SQL : SELECT * FROM dispatch_task WHERE business_id=1 AND channel=0 AND state=3 AND round=0 ORDER BY weight desc,ctime asc LIMIT 0,20
    INDEX :business_id,channel,round,state
    发现一会走索引,一会不走索引扫全表。导致扫全表的慢查询要2s以上,用force index也不管用,优化统计信息也不管用。

    有大佬知道怎么优化吗?数据量1000万,state=3的资源只有几百到上千。

尝试 show stats_healthy where table_name = ‘tb_name’ 以及 show stats_meta where table_name = 'tb_name '; ,如果 Healthy 值很低,modify_count 和 row_count 这两个值被频繁更新,统计信息可能过旧 ,手动搜集下统计信息再查询看下效果。

1 个赞

有找到根因吗?也遇到了

是不是表的更新太频繁了,导致采集不够准确? 更新下 表的采集信息试试
analyze table ‘name’

另外,还可以用 hint 方式试试,自己指定索引。看看效果

指定索引也不管用,指定索引是走对了索引,但是一样很慢

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。