# EXPLAIN

Zeigt den Ausführungsplan einer Anweisung an.

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-Typen

  • AST — Abstrakter Syntaxbaum.
  • SYNTAX — Abfrage-Text nach AST-Ebene Optimierungen.
  • QUERY TREE — Abfragebaum nach Query Tree-Ebene Optimierungen.
  • PLAN — Ausführungsplan der Abfrage.
  • PIPELINE — Ausführungspipeline der Abfrage.

# EXPLAIN AST

Gibt den Abfrage-AST aus. Unterstützt alle Arten von Abfragen, nicht nur SELECT.

Beispiele:

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

# EXPLAIN SYNTAX

Gibt die Abfrage nach Syntax-Optimierungen aus.

Beispiel:

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

Einstellungen:

  • run_passes — Führt alle Abfragebaum-Durchläufe aus, bevor der Abfragebaum ausgegeben wird. Standard: 1.
  • dump_passes — Gibt Informationen über verwendete Durchläufe aus, bevor der Abfragebaum ausgegeben wird. Standard: 0.
  • passes — Gibt an, wie viele Durchläufe ausgeführt werden sollen. Wenn auf -1 gesetzt, werden alle Durchläufe ausgeführt. Standard: -1.

Beispiel:

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

Gibt die Schritte des Abfrageplans aus.

Einstellungen:

  • header — Gibt den Ausgabekopf für den Schritt aus. Standard: 0.
  • description — Gibt die Beschreibung des Schritts aus. Standard: 1.
  • indexes — Zeigt verwendete Indizes, die Anzahl der gefilterten Teile und die Anzahl der gefilterten Granulate für jeden angewendeten Index an. Standard: 0. Unterstützt für MergeTree-Tabellen.
  • actions — Gibt detaillierte Informationen über die Schrittaktionen aus. Standard: 0.
  • json — Gibt die Abfrageplanschritte als Zeile im JSON-Format aus. Standard: 0. Es wird empfohlen, das TSVRaw-Format zu verwenden, um unnötiges Escaping zu vermeiden.

Beispiele:

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)

Wenn json = 1, wird der Abfrageplan im JSON-Format dargestellt. Jeder Knoten ist ein Wörterbuch, das immer die Schlüssel Node Type und Plans enthält. Node Type ist ein String mit dem Namen des Schritts. Plans ist ein Array mit Beschreibungen der untergeordneten Schritte. Weitere optionale Schlüssel können je nach Knotentyp und Einstellungen hinzugefügt werden.

Beispiel:

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

Einstellungen:

  • header — Gibt den Kopf für jeden Ausgabehafen aus. Standard: 0.
  • graph — Gibt einen Graphen aus, der in der DOT-Graphbeschreibungssprache beschrieben wird. Standard: 0.
  • compact — Gibt den Graphen im kompakten Modus aus, wenn die Einstellung graph aktiviert ist. Standard: 1.

Beispiel:

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