【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】5.4.3
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
用的最多的tidb版本就是5.*的,我记得在很多次sql调优过程中都碰到过有的表统计信息收集完成之后,执行sql统计信息还不不准的情况,导致执行计划不准确。
举例:今天碰到的一个子连接全表1400W数据,需要400w数据,结果因为统计信息(刚手动收集过)不准,选择了走索引回表,更慢,这个地方应该全表扫更好,ignore index 之后解决了。
这种有部分表收集完统计信息之后,执行计划还是不准的情况,大家有碰到过吗?
找了一下也没找到过这个问题的issue,在记忆中出现过很多次
【资源配置】
【附件:截图/日志/监控】
prepare_plan_cache 开了吗? 把这个关掉试一下。
SHOW stats_histograms WHERE table_name=‘t1’;
看一下表的统计信息到底是什么情况
我直接用的analyze table t1这种哦,理论上是全部都收集
h5n1
(H5n1)
8
当前是5.4.3版本,但是我再其他5的版本上也遇到过这种问题
表结构能发一下吗?你这表到底有几个索引?都在哪个字段上?
h5n1
(H5n1)
15
show stats_buckets 是列的直方图信息,要是没有显示就把列作为where条件执行个SQL 然后再看看 你的条件和buckets落的范围
h5n1
(H5n1)
17
感觉 是直接按 row_count / distinct_count 预估的
我不理解,为啥stats_hitograms里面没有do_id的信息?