【TiDB 使用环境】测试
【TiDB 版本】6.3.0
【操作系统】centos
【部署方式】VM
【集群数据量】
【集群节点数】
【问题复现路径】
【遇到的问题:查询SQL不能利用索引】
【其他附件:截图/日志/监控】
查询SQL分析截图:
表字段索引定义截图:
【TiDB 使用环境】测试
【TiDB 版本】6.3.0
【操作系统】centos
【部署方式】VM
【集群数据量】
【集群节点数】
【问题复现路径】
【遇到的问题:查询SQL不能利用索引】
【其他附件:截图/日志/监控】
查询SQL分析截图:
收集下表的统计信息,然后再看下执行计划
TiDB的统计信息默认是在数据变更50%的情况下重新收集,但是比较重要的业务健康度低于80执行计划可能就会出现不准的情况, 业务需要对这种情况做定时检测,自动执行analyze table
savedatatime这个字段是什么类型的?
datetime
方便使用explain analyze + sql然后贴一下完整的执行计划吗
把str_to_date函数去掉试试呢?
用 ANALYZE table p_m_enterrecord执行完成后,索引就生效了,是什么原因,能解释一下吗?
那就是统计信息不准确导致优化器没有走这个索引。
执行了analyze table 就相当于手动收集了一下统计信息。
收集下统计信息,看下能走上索引不,不行就直接 hint 绑定下
可能与这个 https://github.com/pingcap/tidb/issues/50080 有关,很快就会修复了,不过你用的不是 LTS 版本,建议尽快升到 LTS 版本
时间字段用区间试试 >= and <
升级到哪个版本是长期维护版本
统计信息是不是已经过期了,在看看查询SQL里是不是有什么函数?因为函数不走索引。