用 EXPLAIN 查看分区查询的执行计划

    使用 语句可以查看 TiDB 在执行查询时需要访问的分区。由于存在分区裁剪,所显示的分区通常只是所有分区的一个子集。本文档介绍了常见分区表的一些优化方式,以及如何解读 EXPLAIN 语句返回的执行计划信息。

    以下示例解释了基于新建分区表 t1 的一条语句:

    • TiDB 成功地识别出只需要访问一个分区 (),并将该信息在 access object 列中注明。
    • └─TableFullScan_19 算子先对整个分区进行扫描,然后执行 └─Selection_20 算子筛选起始日期为 2017-06-01 00:00:00.000000 的行。
    • 之后,└─Selection_20 算子匹配的行在 Coprocessor 中进行流式聚合,Coprocessor 本身就可以理解聚合函数 。

    以下示例中,分区裁剪不会消除任何分区:

    • TiDB 认为需要访问所有分区 (p2016..pMax)。这是因为 TiDB 将谓词 YEAR(d)= 2017 视为 。这个问题并非是 TiDB 特有的。
    • 在扫描每个分区时, 算子将筛选出年份不为 2017 的行。
    • 在每个分区上会执行流式聚合,以计算匹配的行数。
    • └─PartitionUnion_21 算子会合并访问每个分区后的结果。