MySQLのIndex Margeにはご注意を。

Index Margeとは、複数の単一インデックスをMySQLが一つのIndexに結合してくれる機能のことです。

複数のカラムにまたがってインデックスを貼る複合インデックスよりも検索速度は遅いのですが、
複合インデックスを使うと、Where句での条件指定の順番をインデックスで指定した順番通りに
しないと複合インデックスをMySQLが使ってくれなかったりします。

OR Mapperを使用して順番が指定できない場合は
複合インデックスを使いにくいケースが有り、
やはりIndex Margeを狙って、単一インデックスを複数のカラムに貼ったりします。

しかし、その場合注意しなくてはいけないのは、
どのインデックスを使ってMergeしてくれるかは、MySQLに依存するということ。

例えば、4つのカラムにインデックスを貼り、
検索時にはこの4つに対して条件を指定し
MySQLがそのうち2つを選んでIndex Margeした時、
もし、選んだ2つの条件のカーディナリティが低い場合とてもSQLが遅くなります。