EXPLAIN ステートメントを理解する
EXPLAIN ステートメントを使用して、クエリの実行プランを表示します。 EXPLAIN は、SELECT、INSERT、UPDATE、DELETE、VALUES、EXECUTE、DECLARE、または CREATE TABLE AS ステートメントで使用できます。
EXPLAIN では、クエリの実行プランが表示され、PostgreSQL の実行方法(ステートメントの実行方法、インデックスの使用かどうか、テーブルの結合方法、クエリの概念コスト)を理解できます。
EXPLAIN の構文は次のとおりです。
EXPLAIN [ (parameter [, ...] ) ] statement
省略可能なパラメーターは次のとおりです。
- 分析する
- 冗長
- コスト
- バッファー
- 形式
例えば:
EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;
この単純なクエリは、次の情報を返します。
分析する
このオプションはステートメントを実行し、クエリ プランを返します。 ステートメントからの出力は破棄されますが、ステートメントは引き続き実行されます。 ROLLBACK ステートメントと EXPLAIN ANALYZE ステートメントを組み合わせて、INSERT、UPDATE、DELETE などのデータベースに変更を加えるクエリで変更が適用されないようにすることができます。 例えば:
BEGIN;
> EXPLAIN ANALYZE INSERT INTO Animal
> (ani_id, name, weight_kg, cat_id, enc_id)
> VALUES (28, 'Robin Robin', 0.5, 1, 2);
ROLLBACK;
冗長
次のような追加情報が表示されます。
- プラン ツリー内の各ノードの出力列リスト
- スキーマ修飾テーブルと関数名
- 式内の変数名とテーブルエイリアス
- 統計が表示される各トリガーの名前
コスト
推定開始コストと合計コストに加えて、行の推定数と各行の推定幅が含まれます。
バッファー
バッファーは ANALYZE オプションでのみ使用できます。 PostgreSQL は、使用頻度の低い (LRU) キャッシュを使用して、頻繁に使用されるデータをメモリに格納します。 バッファーには、キャッシュから取得されたデータの量と、ディスクから取得された量が表示されます。 共有、ローカル、および一時ブロックのヒット、読み取り、書き込みの数を表示します。 BUFFERS によって提供されるデータは、クエリの I/O 集中型部分を理解するのに役立ちます。
形式
出力形式を定義します。 XML、JSON、または YAML には TEXT と同じ情報が含まれていますが、プログラムが使用しやすい形式です。 TEXT が既定値です。