同一SQL在两套版本相同的集群中,执行计划不同(1个走索引、1个不走索引)

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

  • 【TiDB 版本】:V4.0.4
  • 【问题描述】:
    Q1: 同一SQL在两套版本相同的集群中,为何执行计划不同,生产环境【不走】DATE_UPDATE索引,测试走DATE_UPDATE索引?
    说明情况1:集群版本相同。
    说明情况2:DATE_UPDATE字段在两套集群中均有索引。


    若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。
  1. 测试环境都没有数据吧, 执行计划根据数据量是有可能变化的
  2. 目前生产环境要解决什么问题? 强制走索引吗? 可以使用 hint
    https://docs.pingcap.com/zh/tidb/stable/optimizer-hints#optimizer-hints
1 个赞
  1. 时间条件是特地改成这样测试的,在有数据的情况下也是如此。
  2. 一方面是要走索引,另一方面是要知道为何在版本相同的情况下,相同SQL会有不同的执行计划,到底是啥原因导致的。
  1. 执行计划和数据量是有关系的,测试环境和生产环境的数据量应该不一样吧。
  2. 比如测试环境数据量少,可能就走索引了。 你可以试试,测试环境和生产环境相同的数据,之后都 analyze 之后,看看执行计划是否相同
1 个赞

我备库v.3 主库 v2.1 同样的数据,主库不走索引,备库走索引。。。。。。。。。。。。。。

版本不同执行计划不同正常吧,优化器本身有差别,再加上统计信息可能不一样,analyze试试

等晚上analyze 明天再分析,收集到的统计信息确实不一样,v2.1 版本 缺少几个列的统计信息,所有索引的统计信息都一样
V2.0 可以修改sql 强制走索引吗?

2.1是可以用hint的,2.0太老了,官方早就不支持了,我看文档也没有,得实际测试下了。

1 个赞

考虑下升级吧,2.0和2.1都太古老了,现在社区最低支持3.0的

1 个赞

感谢,升级计划中了。。想改下 sql语句,类似oracle 加个hint