本ブログはアフィリエイト広告を利用しています。

PostgreSQLでSelect文でIndexが使用されなかった話

仕事でSQLの実行計画を取得していたのですがIndexを作成してあるカラムをWhere句で指定していたが、Indexが使用されずに全件検索になっていた。

状況

新規追加したSQLをEXPLAINで実行計画を取得していて一部SQLでインデックスが使用されずにSeq Scanとなっていた。期待していたのはもちろんIndex Scanです。Where句で指定したカラムは単体でIndexを作成済みという状態なのでSeq Scanとなるのはおかしいです。
PKも試しに指定してEXPLAINしてみても同じくSeq Scanとなりました。

解決策

SQLが複雑ならまだしも今回は本当に単純なSQLでしたのでSQLが原因とは思えません。その為、ちょこっと調べてみて統計情報が怪しそうだとわかりました。
以下で統計情報を更新するときちんとIndex Scanになってくれたので今回は統計情報がおかしくなっていたとの結論です。単純で助かりました。

VACUUM ANALYZE テーブル名;

以上です。

コメント

タイトルとURLをコピーしました