range分区表order by 索引列limit 1 长时间未返回

这里执行计划,那个 TopN_13 算子如果改为带有 keep order true 的 limit 算子就好了:

  1. limit 走 updatetime 索引 keep order true,扫出来第一个(满足limit m, n)
  2. TopN_7 对各个分区子表(各个分区)返回的 limit 结果,进行一个 topN 计算返回数据

那这个问题就稍微麻烦,如果有这种 order by limit m, n 查询的强需求,还真没有好的查询方法。

或者试着加范围查询,例如 where updatetime > “xx” and updatetime < “xxx” order by updatetime limit m, n,通过指定索引列范围,让它走 indexRangeScan 算子,这样速度可以加快。

但是要依赖能不能合理添加这个 updatetime 范围,如果不能好像就无办法。只能期望对这种查询,TiDB 执行计划优化,选择更优的执行计划,等新功能优化版本。