# 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 Einstellunggraph
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 2 → 1
AggregatingTransform × 2
(Expression)
ExpressionTransform × 2
(SettingQuotaAndLimits)
(ReadFromStorage)
NumbersMt × 2 0 → 1