EXPLAIN ステートメント
実行計画を表示します。
構文:
例:
EXPLAIN タイプ
AST— 抽象構文木。SYNTAX— ASTレベルの最適化後のクエリテキスト。QUERY TREE— クエリツリーのクエリツリー レベルの最適化後。PLAN— クエリ実行計画。PIPELINE— クエリ実行パイプライン。
EXPLAIN AST
クエリ AST をダンプします。すべてのタイプのクエリをサポートしており、SELECT のみではありません。
例:
EXPLAIN SYNTAX
構文解析後のクエリの抽象構文木 (AST) を表示します。
これは、クエリを解析し、クエリ AST とクエリツリーを構築し、オプションでクエリアナライザーと最適化パスを実行し、その後クエリツリーをクエリ AST に戻すことで行われます。
設定:
oneline– クエリを 1 行で印刷します。デフォルト:0。run_query_tree_passes– クエリツリーをダンプする前にクエリツリーパスを実行します。デフォルト:0。query_tree_passes–run_query_tree_passesが設定されている場合、実行するパスの数を指定します。query_tree_passesを指定しない場合は、すべてのパスを実行します。
例:
出力:
run_query_tree_passesを使用した場合:
出力:
EXPLAIN QUERY TREE
設定:
run_passes— クエリツリーをダンプする前にすべてのクエリツリーパスを実行します。デフォルト:1。dump_passes— クエリツリーをダンプする前に使用されたパスに関する情報をダンプします。デフォルト:0。passes— 実行するパスの数を指定します。-1に設定すると、すべてのパスを実行します。デフォルト:-1。dump_tree— クエリツリーを表示します。デフォルト:1。dump_ast— クエリツリーから生成されたクエリ AST を表示します。デフォルト:0。
例:
EXPLAIN PLAN
クエリ計画ステップをダンプします。
設定:
header— ステップの出力ヘッダーを印刷します。デフォルト: 0。description— ステップの説明を印刷します。デフォルト: 1。indexes— 適用された各インデックスについて、使用されているインデックス、フィルタリングされたパーツの数、およびフィルタリングされたグラニュールの数を表示します。デフォルト: 0。 MergeTree テーブルでサポートされています。projections— プロジェクションの主キー条件に基づいて、パーツレベルのフィルタリングに対する影響を示すすべての解析プロジェクションを表示します。各プロジェクションのこのセクションには、評価されたパーツ、行、マーク、および範囲の数などの統計情報が含まれています。また、このフィルタリングによりスキップされたデータパーツの数を表示し、プロジェクション自体から読み取らずに済みます。プロジェクションが実際に読み取りに使用されたか、フィルタリングのためにのみ分析されたかは、descriptionフィールドによって判断できます。デフォルト: 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— インデックスが適用された後または前のグラニュールの数。Ranges— インデックスが適用された後のグラニュール範囲の数。
例:
projections = 1 の場合、Projections キーが追加されます。これには解析されたプロジェクションの配列が含まれます。各プロジェクションは次のキーを持つ JSON 形式で説明されます:
Name— プロジェクション名。Condition— 使用されたプロジェクション主キー条件。Description— プロジェクションの使用方法の説明 (例: パーツレベルのフィルタリング)。Selected Parts— プロジェクションによって選択されたパーツの数。Selected Marks— 選択されたマークの数。Selected Ranges— 選択された範囲の数。Selected Rows— 選択された行の数。Filtered Parts— パーツレベルのフィルタリングによりスキップされたパーツの数。
例:
actions = 1 の場合、追加されるキーはステップのタイプによって異なります。
例:
EXPLAIN PIPELINE
設定:
header— 各出力ポートのヘッダーを印刷します。デフォルト: 0。graph— DOT グラフ記述言語で記述されたグラフを印刷します。デフォルト: 0。compact—graph設定が有効な場合、コンパクトモードでグラフを印刷します。デフォルト: 1。
compact=0 および graph=1 の場合、プロセッサ名にはユニークなプロセッサ識別子を含む追加のサフィックスが含まれます。
例:
EXPLAIN ESTIMATE
クエリを処理している間にテーブルから読み取る必要がある行、マーク、およびパーツの推定数を表示します。 MergeTree ファミリーのテーブルで動作します。
例
テーブルの作成:
クエリ:
結果:
EXPLAIN TABLE OVERRIDE
テーブル関数を介してアクセスされるテーブルスキーマのテーブルオーバーライドの結果を表示します。また、オーバーライドが問題を引き起こす原因となった場合に例外をスローするいくつかの検証を行います。
例
リモート MySQL テーブルが次のようになっていると仮定します:
結果:
検証は完全ではないため、成功したクエリがオーバーライドによって問題が発生しないことを保証するものではありません。