EXPLAIN 语句
显示语句的执行计划。
语法:
示例:
EXPLAIN 类型
AST
— 抽象语法树。SYNTAX
— 经 AST 级别优化后的查询文本。QUERY TREE
— 经查询树级别优化后的查询树。PLAN
— 查询执行计划。PIPELINE
— 查询执行流水线。
EXPLAIN AST
转储查询的 AST。支持所有类型的查询,不仅限于 SELECT
。
示例:
EXPLAIN SYNTAX
返回经过语法优化后的查询。
示例:
EXPLAIN QUERY TREE
设置:
run_passes
— 在转储查询树之前运行所有查询树通道。默认值:1
。dump_passes
— 在转储查询树之前转储使用的通道的信息。默认值:0
。passes
— 指定要运行的通道数量。如果设置为-1
,则运行所有通道。默认值:-1
。
示例:
EXPLAIN PLAN
转储查询计划步骤。
设置:
header
— 打印步骤的输出头。默认:0
。description
— 打印步骤描述。默认:1
。indexes
— 显示使用的索引,每个应用的索引过滤的部分数量和过滤的颗粒数量。默认:0
。支持 MergeTree 表。actions
— 打印步骤操作的详细信息。默认:0
。json
— 以 JSON 格式打印查询计划步骤的行。默认:0
。建议使用 TSVRaw 格式以避免不必要的转义。
当 json=1
时,步骤名称将包含具有唯一步骤标识符的附加后缀。
示例:
备注
步骤和查询成本估算不支持。
当 json = 1
时,查询计划以 JSON 格式表示。每个节点都是一个字典,始终具有键 Node Type
和 Plans
。Node Type
是字符串形式的步骤名称。Plans
是一个包含子步骤描述的数组。其他可选键可能根据节点类型和设置添加。
示例:
当 description
= 1 时,将为步骤添加 Description
键:
当 header
= 1 时,将为步骤的列数组添加 Header
键。
示例:
当 indexes
= 1 时,将添加 Indexes
键。它包含已使用的索引数组。每个索引描述为 JSON,具有 Type
键(字符串 MinMax
、Partition
、PrimaryKey
或 Skip
)和可选键:
Name
— 索引名称(当前仅用于Skip
索引)。Keys
— 索引使用的列数组。Condition
— 使用的条件。Description
— 索引描述(当前仅用于Skip
索引)。Parts
— 在应用索引之前/之后的部分数量。Granules
— 在应用索引之前/之后的颗粒数量。
示例:
当 actions
= 1 时,添加的键取决于步骤类型。
示例:
EXPLAIN PIPELINE
设置:
header
— 为每个输出端口打印头。默认:0
。graph
— 打印以 DOT 图形描述语言描述的图。默认:0
。compact
— 如果启用graph
设置,则以紧凑模式打印图。默认:1
。
当 compact=0
和 graph=1
时,处理器名称将包含具有唯一处理器标识符的附加后缀。
示例:
EXPLAIN ESTIMATE
显示在处理查询时要从表中读取的估计行、标记和部分数量。适用于 MergeTree 家族中的表。
示例
创建表:
查询:
结果:
EXPLAIN TABLE OVERRIDE
显示通过表函数访问的表模式上表覆盖的结果。 还进行了一些验证,如果覆盖可能导致某种故障,则会抛出异常。
示例
假设您有一个远程 MySQL 表,如下所示:
结果:
备注
验证尚未完成,因此成功的查询并不保证覆盖不会引发问题。