DBの実行計画をだます手段
Indexを貼っているのにindex scanにならない場合
今回はPostgresqlを例に取ります。
クエリ実行時に適切な実行計画を考えクエリを発行するプランナ(オプティマイザ)という存在がありますが、そのせいでindex scanになってほしいところをseq scanになってしまう場合があります。
※対象テーブルのデータ総量等の条件によりseq scanのほうが適切と判断された場合、index scanは走りません。
そういった場合に、一時的にseq scanを停止しindex scanのみ実施するように誘導することによりインデックスのはられ方が適切かどうか判定する方法をご紹介します。
seq scanの一時停止方法
以下のコマンドをDBクライアントから実施することによりseq scanを停止することが可能です。
-- seq scan停止
set enable_seqscan to off
-- seq scanの停止を確認
show enable_seqscan
-- indexがはられてるか確認
explain analyze select * from users where department_id is not null;
-- 確認後onに戻す
set enable_seqscan to on
-- seq scanの有効を確認
show enable_seqscan
コメント