# EXPLAIN

ステートメントの実行計画を表示します。

EXPLAIN [AST | SYNTAX | QUERY TREE | PLAN | PIPELINE | ESTIMATE | TABLE OVERRIDE] [setting = value, ...]
    [
      SELECT ... |
      tableFunction(...) [COLUMNS (...)] [ORDER BY ...] [PARTITION BY ...] [PRIMARY KEY] [SAMPLE BY ...] [TTL ...]
    ]
    [FORMAT ...]

EXPLAIN タイプ

  • AST — 抽象構文木。
  • SYNTAX — AST レベルの最適化後のクエリテキスト。
  • QUERY TREE — クエリツリーの最適化後。
  • PLAN — クエリの実行計画。
  • PIPELINE — クエリの実行パイプライン。

# EXPLAIN AST

クエリの AST をダンプします。SELECT だけでなく、すべてのクエリの種類に対応しています。

例:

EXPLAIN AST SELECT 1;
SelectWithUnionQuery (children 1)
 ExpressionList (children 1)
  SelectQuery (children 1)
   ExpressionList (children 1)
    Literal UInt64_1
EXPLAIN AST ALTER TABLE t1 DELETE WHERE date = today();
  explain
  AlterQuery  t1 (children 1)
   ExpressionList (children 1)
    AlterCommand 27 (children 1)
     Function equals (children 1)
      ExpressionList (children 2)
       Identifier date
       Function today (children 1)
        ExpressionList

# EXPLAIN SYNTAX

構文の最適化後のクエリを返します。

例:

EXPLAIN SYNTAX SELECT * FROM system.numbers AS a, system.numbers AS b, system.numbers AS c;
SELECT
    `--a.number` AS `a.number`,
    `--b.number` AS `b.number`,
    number AS `c.number`
FROM
(
    SELECT
        number AS `--a.number`,
        b.number AS `--b.number`
    FROM system.numbers AS a
    CROSS JOIN system.numbers AS b
) AS `--.s`
CROSS JOIN system.numbers AS c

# EXPLAIN QUERY TREE

設定:

  • run_passes — クエリツリーパスをすべて実行してからクエリツリーをダンプします。デフォルト: 1
  • dump_passes — ダンプする前に使用されたパスに関する情報をダンプします。デフォルト: 0
  • passes — 実行するパスの数を指定します。-1 に設定すると、すべてのパスを実行します。デフォルト: -1

例:

EXPLAIN QUERY TREE SELECT id, value FROM test_table;
QUERY id: 0
  PROJECTION COLUMNS
    id UInt64
    value String
  PROJECTION
    LIST id: 1, nodes: 2
      COLUMN id: 2, column_name: id, result_type: UInt64, source_id: 3
      COLUMN id: 4, column_name: value, result_type: String, source_id: 3
  JOIN TREE
    TABLE id: 3, table_name: default.test_table

# EXPLAIN PLAN

クエリの実行計画のステップをダンプします。

設定:

  • header — ステップの出力ヘッダーを表示します。デフォルト: 0
  • description — ステップの説明を表示します。デフォルト: 1
  • indexes — 使用されたインデックス、フィルタリングされたパーツの数、および適用された各インデックスのフィルタリングされたグラニュールの数を表示します。デフォルト: 0。MergeTree テーブルに対応しています。
  • actions — ステップのアクションに関する詳細情報を表示します。デフォルト: 0
  • json — クエリの実行計画のステップを JSON 形式で行ごとに表示します。デフォルト: 0。不要なエスケープを避けるために TSVRaw フォーマットを使用することをおすすめします。

例:

EXPLAIN SELECT sum(number) FROM numbers(10) GROUP BY number % 4;
Union
  Expression (Projection)
  Expression (Before ORDER BY and SELECT)
    Aggregating
      Expression (Before GROUP BY)
        SettingQuotaAndLimits (Set limits and quota after reading from storage)
          ReadFromStorage (SystemNumbers)

json = 1 の場合、クエリの実行計画は JSON 形式で表されます。各ノードは常に Node Type と Plans のキーを持つ辞書です。Node Type はステップ名の文字列です。Plans は子ステップの説明の配列です。ノードタイプと設定に応じて他のオプションのキーが追加される場合があります。

例:

EXPLAIN json = 1, description = 0 SELECT 1 UNION ALL SELECT 2 FORMAT TSVRaw;
[
  {
    "Plan": {
      "Node Type": "Union",
      "Plans": [
        {
          "Node Type": "Expression",
          "Plans": [
            {
              "Node Type": "SettingQuotaAndLimits",
              "Plans": [
                {
                  "Node Type": "ReadFromStorage"
                }
              ]
            }
          ]
        },
        {
          "Node Type": "Expression",
          "Plans": [
            {
              "Node Type": "SettingQuotaAndLimits",
              "Plans": [
                {
                  "Node Type": "ReadFromStorage"
                }
              ]
            }
          ]
        }
      ]
    }
  }
]

# EXPLAIN PIPELINE

設定:

  • header — 各出力ポートのヘッダーを表示します。デフォルト: 0
  • graph — DOT グラフ記述言語で記述されたグラフを表示します。デフォルト: 0
  • compactgraph 設定が有効な場合、コンパクトモードでグラフを表示します。デフォルト: 1

例:

EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000) GROUP BY number % 4;
(Union)
(Expression)
ExpressionTransform
  (Expression)
  ExpressionTransform
    (Aggregating)
    Resize 21
      AggregatingTransform × 2
        (Expression)
        ExpressionTransform × 2
          (SettingQuotaAndLimits)
            (ReadFromStorage)
            NumbersMt × 2 01