表统计信息与实际数据相差过大导致索引失效

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

[TiDB 版本]
5.7.25-TiDB-v3.0.11
[问题描述]
在查看 SHOW STATS_BUCKETS 直方桶信息时,发现直方桶数据和我们实际数据相差过大,

正常我们业务总的数据也才4亿多行,现在显示最后一个桶里的count信息都有4亿多了,导致现在使用到这个索引的好一些SQL不再使用这个索引,直接全表扫描。
这张表新增数据只会被修改,不会删除,修改字段都是非索引字段,有什么解决办法吗
注:数据类型为datetime,另外这张表的其他字段也出现了这种问题,varchar类型的索引:

按理说应该是均匀分布的,不会有太大的差别,这个感觉就一直是在递增的统计

建议重新收集下表和索引的统计信息,收集完之后再观察下效果。

因为是生产业务,收集的话要等到晚上 ,正常应该不会出现这种情况吧,感觉count一直在累加

1.看下表统计信息健康度情况,看下是不是得分较低,命令 SHOW STATS_HEALTHY [ShowLikeOrWhere]
2.可以先临时通过执行计划绑定的方式,让这张表涉及的关键 SQL 走上索引,参考:
https://docs.pingcap.com/zh/tidb/v3.0/execution-plan-binding#执行计划绑定

的确只有50了
image
那应该每个月定时整理一下表吗

一般表上的统计信息默认会进行自动收集的;对于一些批处理任务导致表发生大量数据增删改查后,可以考虑手工收集下。

一行记录会被更新几次,但是不会删除,这样的话看来要定时整理了

:+1:

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