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

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 TypePlans 键。Node 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 表,如下所示:

结果:

备注

验证不完整,因此成功的查询并不能保证覆盖不会导致问题。