跳到主要内容
跳到主要内容

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 TypePlansNode Type 是字符串形式的步骤名称。Plans 是一个包含子步骤描述的数组。其他可选键可能根据节点类型和设置添加。

示例:

description = 1 时,将为步骤添加 Description 键:

header = 1 时,将为步骤的列数组添加 Header 键。

示例:

indexes = 1 时,将添加 Indexes 键。它包含已使用的索引数组。每个索引描述为 JSON,具有 Type 键(字符串 MinMaxPartitionPrimaryKeySkip)和可选键:

  • Name — 索引名称(当前仅用于 Skip 索引)。
  • Keys — 索引使用的列数组。
  • Condition — 使用的条件。
  • Description — 索引描述(当前仅用于 Skip 索引)。
  • Parts — 在应用索引之前/之后的部分数量。
  • Granules — 在应用索引之前/之后的颗粒数量。

示例:

actions = 1 时,添加的键取决于步骤类型。

示例:

EXPLAIN PIPELINE

设置:

  • header — 为每个输出端口打印头。默认:0
  • graph — 打印以 DOT 图形描述语言描述的图。默认:0
  • compact — 如果启用 graph 设置,则以紧凑模式打印图。默认:1

compact=0graph=1 时,处理器名称将包含具有唯一处理器标识符的附加后缀。

示例:

EXPLAIN ESTIMATE

显示在处理查询时要从表中读取的估计行、标记和部分数量。适用于 MergeTree 家族中的表。

示例

创建表:

查询:

结果:

EXPLAIN TABLE OVERRIDE

显示通过表函数访问的表模式上表覆盖的结果。 还进行了一些验证,如果覆盖可能导致某种故障,则会抛出异常。

示例

假设您有一个远程 MySQL 表,如下所示:

结果:

备注

验证尚未完成,因此成功的查询并不保证覆盖不会引发问题。