EXPLAIN ステートメント
ステートメントの実行計画を表示します。
構文:
例:
EXPLAIN タイプ
AST
— 抽象構文木。SYNTAX
— ASTレベルの最適化後のクエリテキスト。QUERY TREE
— 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 Type
と Plans
のキーを持つ辞書です。Node Type
はステップ名の文字列です。Plans
は子ステップの説明の配列です。その他のオプションのキーはノードのタイプと設定に応じて追加される場合があります。
例:
description
= 1 の場合、Description
キーがステップに追加されます:
header
= 1 の場合、Header
キーが列の配列としてステップに追加されます。
例:
indexes
= 1 の場合、Indexes
キーが追加されます。それには、使用されたインデックスの配列が含まれます。各インデックスは、Type
キー(文字列 MinMax
、Partition
、PrimaryKey
または Skip
)とオプションのキーで説明されます:
Name
— インデックス名(現在はSkip
インデックスにのみ使用されます)。Keys
— インデックスによって使用されるカラムの配列。Condition
— 使用された条件。Description
— インデックスの説明(現在はSkip
インデックスにのみ使用されます)。Parts
— インデックスが適用される前後のパーツの数。Granules
— インデックスが適用される前後のグラニュールの数。
例:
actions
= 1 の場合、追加されたキーはステップタイプに依存します。
例:
EXPLAIN PIPELINE
設定:
header
— 各出力ポートのヘッダーを印刷します。デフォルト: 0。graph
— DOT グラフ記述言語で記述されたグラフを印刷します。デフォルト: 0。compact
—graph
設定が有効な場合、コンパクトモードでグラフを印刷します。デフォルト: 1。
compact=0
および graph=1
の場合、プロセッサ名にはユニークなプロセッサ識別子を含む追加の接尾辞が含まれます。
例:
EXPLAIN ESTIMATE
クエリを処理する際に読み取る必要がある行、マーク、およびパーツの推定数を表示します。MergeTree ファミリーのテーブルで動作します。
例
テーブルの作成:
クエリ:
結果:
EXPLAIN TABLE OVERRIDE
テーブル関数を通じてアクセスされるテーブルスキーマでのテーブルオーバーライドの結果を表示します。 また、オーバーライドが何らかの失敗を引き起こす場合、例外をスローして検証も行います。
例
次のようなリモートMySQLテーブルを想定します:
結果:
検証は完全ではないため、成功したクエリがオーバーライドが問題を引き起こさないことを保証するわけではありません。