メインコンテンツまでスキップ
メインコンテンツまでスキップ

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 TypePlans のキーを持つ辞書です。Node Type はステップ名の文字列です。Plans は子ステップの説明の配列です。その他のオプションのキーはノードのタイプと設定に応じて追加される場合があります。

例:

description = 1 の場合、Description キーがステップに追加されます:

header = 1 の場合、Header キーが列の配列としてステップに追加されます。

例:

indexes = 1 の場合、Indexes キーが追加されます。それには、使用されたインデックスの配列が含まれます。各インデックスは、Type キー(文字列 MinMaxPartitionPrimaryKey または Skip)とオプションのキーで説明されます:

  • Name — インデックス名(現在は Skip インデックスにのみ使用されます)。
  • Keys — インデックスによって使用されるカラムの配列。
  • Condition — 使用された条件。
  • Description — インデックスの説明(現在は Skip インデックスにのみ使用されます)。
  • Parts — インデックスが適用される前後のパーツの数。
  • Granules — インデックスが適用される前後のグラニュールの数。

例:

actions = 1 の場合、追加されたキーはステップタイプに依存します。

例:

EXPLAIN PIPELINE

設定:

  • header — 各出力ポートのヘッダーを印刷します。デフォルト: 0。
  • graphDOT グラフ記述言語で記述されたグラフを印刷します。デフォルト: 0。
  • compactgraph 設定が有効な場合、コンパクトモードでグラフを印刷します。デフォルト: 1。

compact=0 および graph=1 の場合、プロセッサ名にはユニークなプロセッサ識別子を含む追加の接尾辞が含まれます。

例:

EXPLAIN ESTIMATE

クエリを処理する際に読み取る必要がある行、マーク、およびパーツの推定数を表示します。MergeTree ファミリーのテーブルで動作します。

テーブルの作成:

クエリ:

結果:

EXPLAIN TABLE OVERRIDE

テーブル関数を通じてアクセスされるテーブルスキーマでのテーブルオーバーライドの結果を表示します。 また、オーバーライドが何らかの失敗を引き起こす場合、例外をスローして検証も行います。

次のようなリモートMySQLテーブルを想定します:

結果:

注記

検証は完全ではないため、成功したクエリがオーバーライドが問題を引き起こさないことを保証するわけではありません。