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 表,如下所示:
结果:
备注
验证不完整,因此成功的查询并不能保证覆盖不会导致问题。