用 EXPLAIN 查看 SQL 语句需要访问的分区
使用 语句可以查看 TiDB 在执行查询时需要访问的分区。由于存在分区裁剪,所显示的分区通常只是所有分区的一个子集。本文档介绍了常见分区表的一些优化方式,以及如何解读 EXPLAIN
语句返回的执行计划信息。
以下示例解释了基于新建分区表 t1
的一条语句:
- TiDB 成功地识别出只需要访问一个分区(),并将该信息在
access object
列中注明。 └─TableFullScan_19
算子先对整个分区进行扫描,然后执行└─Selection_20
算子筛选起始日期为2017-06-01 00:00:00.000000
的行。- 每个 Coprocessor 请求会发送一行数据给 TiDB 的
└─TableReader_22
算子,然后将数据在StreamAgg_21
算子下进行流式聚合,再将一行数据返回给客户端。
以下示例中,分区裁剪不会消除任何分区:
- TiDB 认为需要访问所有分区
(p2016..pMax)
。这是因为 TiDB 将谓词YEAR(d)= 2017
视为 。这个问题并非是 TiDB 特有的。 - 在每个分区上会执行流式聚合,以计算匹配的行数。
└─PartitionUnion_21
算子会合并访问每个分区后的结果。