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

EXPLAIN Statement

ステートメントの実行プランを表示します。

構文:

例:

EXPLAIN の種類

  • AST — 抽象構文木。
  • SYNTAX — ASTレベルの最適化後のクエリテキスト。
  • 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 キー(文字列 MinMax, Partition, PrimaryKey または Skip)とオプションのキーで説明されます:

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

例:

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

例:

EXPLAIN PIPELINE

設定:

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

compact=0graph=1 の場合、プロセッサの名前には一意のプロセッサ識別子のサフィックスが含まれます。

例:

EXPLAIN ESTIMATE

クエリを処理する際にテーブルから読み込まれる行数、マーク、パーツの推定数を表示します。 MergeTree ファミリーのテーブルで動作します。

テーブルの作成:

クエリ:

結果:

EXPLAIN TABLE OVERRIDE

テーブル関数を介してアクセスされるテーブルスキーマに対するテーブルオーバーライドの結果を表示します。 また、バリデーションを行い、オーバーライドが何らかの失敗を引き起こす場合は例外をスローします。

リモート MySQL テーブルが以下のようになっていると仮定します。

結果:

注記

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