• 検索結果がありません。

実行計画

ドキュメント内 PostgreSQL Internals (1) (ページ 160-164)

5. パフォーマンス関連

5.3 実行計画

5.3.3 実行計画

EXPLAIN コマンドで出力される実行計画には以下のクエリー・オペレーターがありま

す。このリストは、PostgreSQL 9.6.2のソースコード(src/backend/commands/explain.c)

から検索しました。

表 60 実行計画

クエリー・オペレーター 動作 スタートアップ・コスト

Result 非テーブル問い合わせ 無

Insert INSERT文の実行

Delete DELETE文の実行

Update UPDATE文の実行

Append データの追加処理 無

Merge Append マージ処理

Recursive Union 再帰ユニオン

BitmapAnd ビットマップ検索 AND

BitmapOr ビットマップ検索 OR

Nested Loop ネステッド・ループ 無

Merge Join マージ結合 有

Hash Join ハッシュ結合 有

Seq Scan 全件検索 無

Sample Scan サンプル検索

Index Scan インデックス部分検索 無

Index Only Scan インデックスのみの部分検索

Bitmap Index Scan インデックスのビットマップ・ス

キャン

Bitmap Heap Scan ヒープのビットマップ・スキャン 有

Tid Scan TID走査プラン 無

Subquery Scan サブクエリー検索 無

Function Scan 関数スキャン 無

Values Scan 値スキャン

CTE Scan WITH句を使ったCTEスキャン

WorkTable Scan 一時テーブル検索

Foreign Scan 外部テーブル検索

Custom Scan カスタム検索

Materialize 副問い合わせ 有

表 60 実行計画(続)

クエリー・オペレーター 動作 スタートアップ・コスト

Sort ソート処理 有

Group GROUP BY句の処理 有

Aggregate 集計処理の利用 有

GroupAggregate グループ化

HashAggregate ハッシュ集計処理の利用

WindowAgg ウインドウ集計処理

Unique DISTINCT / UNION句の処理 有

SetOp INTERCEPT / EXCEPT句の処理 有

HashSetOp ハッシュ処理

LockRows ロック

Limit LIMIT句の処理 有(OFFSET > 0)

Hash ハッシュ処理 有

Parallel Seq Scan パラレル全件検索

Finalize Aggregate パラレル処理の最終集計

Gather パラレル・ワーカーの集約

Partial Aggregate パラレル処理の集計

Partial HashAggregate Partial GroupAggregate

Single Copy 単一プロセスで実行

以下に代表的なクエリー・オペレーターの説明を記述します。

□ Sort

ORDER BY句で明示的に指定される場合やUnique処理、Merge Join処理などによる

暗黙のソートでも実行される可能性があります。

□ Index Scan

インデックスからテーブルを検索します。Index Cond実行計画が表示されない場合はイ ンデックスのフルスキャンを指します。

□ Index Only Scan

インデックスから必要な情報をすべて取得し、テーブルに検索を行いません。ただしビジ ビリティ・マップを参照した結果、テーブルにアクセスする場合もあります。

□ Bitmap Scan

BitmapOr と BitmapAnd を使ってリレーション全体のビットマップをメモリー内で作

成します。

□ Result

テーブルにアクセスせずに結果を返す場合に表示されます。

□ Unique

重複値を排除します。UNION句、DISTIMCT句の処理で使用されます。

□ Limit

ORDER BY句と共にLIMIT句が指定された場合に使用されます。

□ Aggregate

集計関数、GROUP BY句で使用されます。HashAggregate、GroupAggregateが使用さ れる場合があります。

□ Append

UNION (ALL) によるデータの追加処理で使用されます。

□ Nested Loop

INNER JOIN、LEFT OUTER JOINで使用されます。外部テーブルをスキャンし、内部

テーブルにマッチするレコードを検索します。

□ Merge Join

Merge Right JoinとMerge In Joinがあります。ソートされたレコードセットを結合さ

せます。

□ Hash, Hash Join

ハッシュ・テーブルを作成し、2つのテーブルを比較します。ハッシュ・テーブルの作成 のために初期コストが必要です。

□ Tid Scan

Tuple Id (ctid)を指定した検索で使用されます。

□ Function

関数がレコードを生成する場合に使用されます(SELECT * FROM func()等)。

□ SetOp

INTERSECT句、INTERSECT ALL句、EXCEPT句、EXCEPT ALL句の処理で使用

されます。

実行計画を作成するプランナーが選択するクエリー・オペレーターを制御するパラメー ターは以下の通りです。これらのパラメーターの設定値はデフォルトでonになっています。

これらのパラメーターをoffに設定しても、指定したクエリー・オペレーターが完全に禁止 されるわけではありません。

パラメーターをoffに指定すると、スタートアップ・コストに1.0e10(10,000,000,000)

が追加されて実行計画が比較されます。

表 61 実行計画を制御するパラメーター

パラメーター 説明 デフォルト値

enable_bitmapscan ビットマップ・スキャンの実行 on

enable_indexscan インデックス・スキャンの実行 on

enable_tidscan TIDスキャンの実行 on

enable_seqscan シーケンシャル・スキャンの実行 on

enable_hashjoin ハッシュ結合の実行 on

enable_mergejoin マージ結合の実行 on

enable_nestloop ネストループ結合の実行 on

enable_hashagg ハッシュ集約の実行 on

enable_material 問い合わせプランナーの具体化のの実行 on

enable_sort ソート処理の実行 on

enable_indexonlyscan インデックスのみで検索を完了 on

下記 の例では シーケンシャ ル・スキ ャンのみが実 行される 環境で、パラ メータ ー

enable_seqscan の値を off に設定しています。初期コストが大きくなりますが、シーケン

シャル・スキャン(Seq Scan)が行われていることがわかります。

例 134 パラメーターenable_seqscanの変更

ドキュメント内 PostgreSQL Internals (1) (ページ 160-164)