pg_hint_planで指定できるヒントは以下の通りです。
グループ | ヒントの書式 | 説明 |
---|---|---|
スキャン方式 | SeqScan(テーブル) | 指定したテーブルについて、Seq Scanを選択します。 |
TidScan(テーブル) | 指定したテーブルについて、Tid Scanを選択します。検索条件にctidを指定した場合にのみ有効です。 | |
IndexScan(テーブル[ インデックス...]) | 指定したテーブルについて、Index Scanを選択します。インデックスも指定した場合は、指定したインデックスの中でコストが最小となるIndex Scanを選択します。ただし、インデックスが存在しない場合や指定したインデックスがWHERE句やJOIN条件などに関連しない場合はSeq Scanを選択します。 | |
IndexOnlyScan(テーブル[ インデックス...]) | 指定したテーブルについて、Index Only ScanとIndex Scanのうちコストが最小となるスキャン方式を選択します。インデックスも指定した場合は、指定したインデックスの中でIndex Only ScanとIndex Scanのうちコストが最小となるスキャン方式を選択します。ただし、インデックスが存在しない場合や指定したインデックスがWHERE句やJOIN条件などに関連しない場合はSeq Scanを選択します。また、これらの場合以外にも、インデックスが持つ値だけでなくテーブルの値も必要な場合はIndex Scanを選択します。PostgreSQL 9.2以降で動作します。 | |
BitmapScan(テーブル[ インデックス...]) | 指定したテーブルについて、Bitmap Scanを選択します。インデックスも指定した場合は、指定したインデックスの中でコストが最小となるインデックスを選択します。ただし、インデックスが存在しない場合や指定したインデックスがWHERE句やJOIN条件などに関連しない場合はSeq Scanを選択します。 | |
NoSeqScan(テーブル) | 指定したテーブルについて、Seq Scan以外でコストが最小となるスキャン方式を選択します。ただし、他のスキャン方式を選択できない場合は、Seq Scanを選択します。 | |
NoTidScan(テーブル) | 指定したテーブルについて、Tid Scan以外でコストが最小となるスキャン方式を選択します。 | |
NoIndexScan(テーブル) | 指定したテーブルについて、Index ScanとIndex Only Scanを除いたスキャン方式の中でコストが最小となるスキャン方式を選択します。 | |
NoIndexOnlyScan(テーブル) | 指定したテーブルについて、Index Only Scan以外でコストが最小となるスキャン方式を選択します。PostgreSQL 9.2以降で動作します。 | |
NoBitmapScan(テーブル) | 指定したテーブルについて、Bitmap Scan以外でコストが最小となるスキャン方式を選択します。 | |
結合方式 | NestLoop(テーブル テーブル[ テーブル...]) | 指定したテーブル間の結合にNested Loopを選択します。 |
HashJoin(テーブル テーブル[ テーブル...]) | 指定したテーブル間の結合にHash Joinを選択します。 | |
MergeJoin(テーブル テーブル[ テーブル...]) | 指定したテーブル間の結合にMerge Joinを選択します。 | |
NoNestLoop(テーブル テーブル[ テーブル...]) | 指定したテーブル間の結合にNested Loop以外の結合方式を選択します。 | |
NoHashJoin(テーブル テーブル[ テーブル...]) | 指定したテーブル間の結合にHash Join以外の結合方式を選択します。 | |
NoMergeJoin(テーブル テーブル[ テーブル...]) | 指定したテーブル間の結合にMerge Join以外の結合方式を選択します。 | |
結合順序 | Leading(テーブル テーブル[ テーブル...]) | 指定したテーブルを指定した順番通りに結合します。 |
GUCパラメータ | Set(GUCパラメータ 値) | そのクエリの実行計画を作成している間だけ、指定したGUCパラメータを指定した値に変更します。 |