EXPLAIN と EXPLAIN ANALYZE
PostgreSQL の EXPLAIN ANALYZE とは?
EXPLAIN は PostgreSQL がクエリをどう実行するつもりかを表示します。EXPLAIN ANALYZE はさらにクエリを実際に実行し、各ステップの実際の行数と所要時間を報告します。
EXPLAIN は、オプティマイザが文に対して選んだ実行戦略を出力します。どのテーブルをどう読むか、どの結合方式を使うか、各ステップの推定コストと推定行数などです。ANALYZE オプションを付けると、PostgreSQL は文を実際に実行し、推定値の横に実際の時間と行数を追加します。
推定行数と実際の行数を比べるのが、古くなった統計情報や不適切なアクセス方法の選択を見つける最も手早い方法です。BUFFERS オプションを付けると、共有メモリ内で見つかったページ数と、読み込む必要があったページ数が追加されます。EXPLAIN ANALYZE は文を実際に実行するため、データを変更する文を調べるだけの場合は BEGIN と ROLLBACK で囲んでください。
例
この例では、その列にインデックスがないテーブルでメールアドレスを 1 件検索します。出力には Seq Scan が表示され、推定行数と実際の行数、所要時間、バッファの統計情報が含まれます。
CREATE TABLE users (id int PRIMARY KEY, email text);
INSERT INTO users
SELECT g, 'user' || g || '@example.com' FROM generate_series(1, 50000) AS g;
ANALYZE users;
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM users WHERE email = 'user42@example.com';拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。
出典
PostgreSQL 公式ドキュメント(英語)。