翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
EXPLAIN クエリプラン
PostgreSQL には、クエリの実行方法の詳細を含むクエリプランを返すための EXPLAIN
および EXPLAIN ANALYZE
オプションが用意されています。
EXPLAIN ステートメント
EXPLAIN
ステートメントは、PostgreSQL プランナーが特定のステートメントに対して生成するクエリプランを返します。クエリプランには、以下が表示されます。
-
ステートメントに関係するテーブルのスキャン方法 (インデックススキャンやシーケンシャルスキャンなど)
-
複数のテーブルを結合する方法 (ハッシュ結合、マージ結合、ネストされたループ結合など)
クエリのパフォーマンスを向上させるには、計画を理解することが不可欠です。計画を理解したら、クエリに時間がかかりすぎている箇所に集中し、時間を短縮するためのアクションを実行できます。
EXPLAIN ANALYZE の使用
PostgreSQL では、 EXPLAIN
は指定されたステートメントの計画のみを生成します。ANALYZE
キーワードを追加すると、 EXPLAIN
はプランを返し、クエリを実行し、各ステップの実際のランタイムと行数を表示します。これはクエリのパフォーマンスを分析するために不可欠です。
重要
を使用する場合はEXPLAIN ANALYZE
、INSERT
、、UPDATE
および に注意してくださいDELETE
。
EXPLAIN クエリプランの読み方
PostgreSQL クエリプランは、複数のノードで構成されるツリー構造です。EXPLAIN
クエリプランには、データベースエンジンがクエリの実行に使用するステップが表示されます。クエリプランには、次の情報が表示されます。
-
シーケンシャルスキャン、インデックススキャン、ネストされたループ結合など、実行されるオペレーションのタイプ。
-
実行中のオペレーションを記述する
Seq Scan
Index Scan
、Nested Loop
、 などのラベル。 -
クエリによって処理されるテーブルまたはインデックスの名前。
-
任意の計算単位の推定コストと処理された行数に関する情報を含むコストと行列。
-
条件など、オペレーションに適用されるフィルターのフィルター
where
条件。 -
ステップを視覚的に表現し、各オペレーションをノードとして表示し、オペレーションを接続する矢印を示します。オペレーションの順序は左から右に示され、以前のオペレーションは後のオペレーションにフィードされます。
次のスクリーンショットは、シーケンシャルスキャンのクエリプランを示しています。
コスト見積もりは、PostgreSQL がクエリが結果を返すために 32.60 単位の計算を必要とすることを想定している(cost=0.00..32.60 rows=2260 width=8)
ことを意味します。
0.00
値は、このノードが動作を開始できるコストです (この場合は、クエリの起動時間)。rows
値は、シーケンシャルスキャンが返す推定行数です。width
値は、返された行のバイト単位の推定サイズです。
この例では ANALYZE
オプションEXPLAIN
を指定しているため、クエリが実行され、タイミング情報がキャプチャされました。結果は次の(actual time=0.120..0.121 rows=1 loops=1)
ことを意味します。
-
シーケンシャルスキャンが 1 回 (
loops
値) 実行されました。 -
スキャンは 1 行を返しました。
-
実際の時間は 0.12 ミリ秒でした。