EXPLAIN 文
文の実行計画を表示します。
構文:
例:
EXPLAIN の種類
AST— 抽象構文木 (Abstract Syntax Tree)。SYNTAX— AST レベルの最適化後のクエリテキスト。QUERY TREE— 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を指定しない場合は、すべてのパス処理を実行します。
例:
Output:
run_query_tree_passes を有効にした場合:
出力:
EXPLAIN QUERY TREE
Settings:
run_passes— クエリツリーをダンプする前に、すべてのクエリツリーパスを実行します。デフォルト:1。dump_passes— クエリツリーをダンプする前に、使用されたパスに関する情報をダンプします。デフォルト:0。passes— 実行するパスの数を指定します。-1に設定すると、すべてのパスを実行します。デフォルト:-1。dump_tree— クエリツリーを表示します。デフォルト:1。dump_ast— クエリツリーから生成されたクエリ AST を表示します。デフォルト:0。
Example:
EXPLAIN PLAN
クエリプランのステップを出力します。
設定:
header— ステップの出力ヘッダーを表示します。デフォルト: 0。description— ステップの説明を表示します。デフォルト: 1。indexes— 使用された索引と、適用された各索引ごとにフィルタリングされたパーツ数およびグラニュール数を表示します。デフォルト: 0。MergeTree テーブルでサポートされます。ClickHouse >= v25.9 では、このステートメントはSETTINGS use_query_condition_cache = 0, use_skip_indexes_on_data_read = 0と併用した場合にのみ有用な出力を返します。projections— 解析されたすべてのプロジェクションと、プロジェクションの主キー条件に基づくパーツレベルでのフィルタリングへの影響を表示します。各プロジェクションについて、このセクションには、そのプロジェクションの主キーを使って評価されたパーツ数、行数、マーク数、範囲数といった統計情報が含まれます。また、プロジェクション自体からデータを読み込むことなく、このフィルタリングによりスキップされたデータパーツの数も示します。プロジェクションが実際に読み取りに使用されたか、あるいはフィルタリングのために解析されたのみかは、descriptionフィールドから判別できます。デフォルト: 0。MergeTree テーブルでサポートされます。actions— ステップ内のアクションに関する詳細情報を表示します。デフォルト: 0。json— クエリプランのステップを JSON 形式の行として表示します。デフォルト: 0。不要なエスケープを避けるため、TabSeparatedRaw (TSVRaw) 形式の使用を推奨します。input_headers- ステップの入力ヘッダーを表示します。デフォルト: 0。主に、入力・出力ヘッダーの不整合に関連する問題をデバッグする開発者にとって有用です。column_structure- ヘッダー内のカラム名と型に加えて、そのカラムの構造も表示します。デフォルト: 0。主に、入力・出力ヘッダーの不整合に関連する問題をデバッグする開発者にとって有用です。
json=1 の場合、ステップ名には一意なステップ識別子を含む追加のサフィックスが付きます。
例:
ステップおよびクエリのコスト見積もりには対応していません。
json = 1 の場合、クエリプランは JSON 形式で表現されます。各ノードは、必ず Node Type と Plans というキーを持つ辞書型オブジェクトです。Node Type はステップ名を表す文字列であり、Plans は子ステップの記述を含む配列です。ノードの種類と設定に応じて、その他の任意のキーが追加される場合があります。
例:
description = 1 の場合、ステップに Description キーが追加されます。
header = 1 の場合、ステップに Header キーがカラム配列として追加されます。
例:
indexes = 1 の場合、Indexes キーが追加されます。これは使用された索引の配列を含みます。各索引は JSON で表現され、Type キー(文字列 MinMax、Partition、PrimaryKey または Skip)と、以下の任意のキーを持つ場合があります:
Name— 索引名(現在はSkip索引でのみ使用されます)。Keys— 索引で使用されるカラムの配列。Condition— 適用された条件。Description— 索引の説明(現在はSkip索引でのみ使用されます)。Parts— 索引適用の前後におけるパーツの数。Granules— 索引適用の前後におけるグラニュールの数。Ranges— 索引適用後のグラニュール範囲の数。
例:
projections = 1 の場合、Projections キーが追加されます。これは解析された projection の配列を含みます。各 projection は、次のキーを持つ JSON で表現されます。
Name— projection 名。Condition— 使用された projection の primary key 条件。Description— projection の使用方法の説明(例: パーツレベルのフィルタリング)。Selected Parts— projection によって選択されたパーツの数。Selected Marks— 選択された mark の数。Selected Ranges— 選択された range の数。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 テーブルがあるとします:
結果:
検証は完全ではないため、クエリが成功しても、そのオーバーライドによって問題が発生しないことは保証されません。