インデックスの適用基準
以上をまとめると、ある列に対してインデックスの作成を検討すべきケースは次のようになります。
- WHERE句において検索条件になっている。ただし、文字列型において、前方一致検索でない場合を除く
- ORDER BYの対象になっている
- GROUP BYの対象になっている
- 重複が比較的少ない
- 抽出結果が比較的少ない
なお、主キーやユニーク制約のある列には自動的にインデックスが貼られるので、あらためてインデックスを作成する必要はありません。
インデックスの使用状況
使われていないインデックスを調べるには pg_stat_user_indexes を見るのが手っ取り早い。
select indexrelname, idx_scan, idx_tup_read, idx_tup_fetch
from pg_stat_user_indexes
where
indexrelname not like '%_pkey' and
idx_scan = 0;