# 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
。compact
—graph
設定が有効な場合、コンパクトモードでグラフを表示します。デフォルト:1
。
例:
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