ORDER BY 不根据主键排序,且使用limit的情况下,重复执行同一SQL时,结果集是否会出现不同的情况

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

  • 【TiDB 版本】:V4.0.4
  • 【问题描述】:
    Q1:本SQL根据DATE_UPDATE(有索引)查询、并根据主键ID排序,执行计划为什么不会走DATE_UPDATE索引?

    Q2:若不根据主键ID排序,而根据DATE_UPDATE排序(会走索引),是否会出现同一SQL,得到不同结果集的情况?
    辅助说明Q2:由于TIDB自增主键不连续,在没有根据主键order by的情况下,会出现不同的结果集,例如:select * from table limit 10; 该语句重复执行会得到不同的结果集。

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。

Q1: 因为如果走 DATE_UPDATE 的 index scan 的话 limit 是不能下推到 TiKV 的。这样的话就只能在 TIDB 这边排序,这样的话成本更高。具体可以通过 hint 来指定使用 DATE_UPDATE 索引来做执行计划的对比。
Q2:正常情况下在指定了 order by 进行排序,结果应该是固定的。