【スポンサーリンク】

MySQLのオプティマイザに裏切られた話

とあるアプリの検索機能がかなり重く、調べてみたらオプティマイザに裏切られていた(知識が未熟だった)ときの話。

検索の対象テーブルはA,B,C,Dとカラムがあり、A, Bに複合ユニークキー、B, C, Dに複合インデックスを設定していた。

そのアプリの検索機能では、「B, C, Dに条件指定→絞込み検索」といったよくある機能で、当然B, C, Dの複合インデックスが働くことを期待していた。

しかし、あるとき検索が想像よりも遅いと思ったため、おもむろにEXPLAINを実行すると、なぜかA, Bの複合ユニークキーが使われていた。

結局のところUSE INDEXを用いて無事高速に動作するようになったのだが、「B, C, DがWHEREにあるんだから素直にB, C, Dの複合インデックスを使ってくれよ」と思ったわけである。

【スポンサーリンク】