TiDB分页查询流程

执行流程

第一步

TiDB 生成执行计划

TopN(offset 50 count 200)

TableReader

TopN pushdown

TableFullScan

逻辑是:

Top 250

不是 200。

因为:

offset + count


第二步

TopN 下推到 TiKV

每个 Region 都会执行:

Top 250

即:

region1

返回

0-100

最多100行


region2

返回

101-200

最多100行


region3

返回

201-300

最多100行

但:

只需要

250


第三步

TiDB 汇总

收到:

100
100
100

共:

300

然后:

全局排序

得到

0-300

取:

0-250

再丢掉:

0-50

最终:

50-250


执行流程图

TiDB

Top250

tikv1(region1 leader)
返回 0-100

tikv2(region2 leader)
返回 101-200

tikv3(region3 leader)
返回 201-300

TiDB merge sort

0-250

丢掉50

50-250


关键点

每个 region 都执行 TopN

不是只扫部分 region。

原因:

TiDB 不知道:

50-250 在哪个 region

必须全部参与。

2 个赞