先日のDB勉強会でEXPLAINとか使ったことないですし、と言っていた私ですが、運用中のサービスを見るとどう考えても遅いクエリがあったので調査のためにようやくEXPLAINを使いました。しかし読み方がわからない。とりあえずぐぐってみたら色々と興味深い内容があったので、ようやく理解できるようになってきました。
以下のスライドがとても参考になりました。
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
ふむふむと思って読みすすめると、フルスキャンが走ってしまい、もうどうしようもなく遅いことが分かったので、手を打たないといけない。そこで、インデックスについても勉強しだしたのですが、部分一致検索(ILIKE ‘%パトラッシュ%’)とかだと全くインデックス効かないこととかわかりました。まぁなんか聞いたことあるな、程度には思っていましたが。
関数を作って、関数に対してインデックスを貼るということもできるんですね…。式インデックスというようです。
参考サイト:PostgreSQLで全角半角を区別しない問い合わせ
こういう場合は全文検索を使うのがよさそう、という情報を見たので、今のところは全文検索を行う方向で考えていますが、本番環境がHerokuなので、Herokuで動く全文検索の方法をこれから調べていこうと思います。