はじめに
SQLチューニングで複合INDEXを作る時、カラムをとにかく列挙すれば良いわけではありません。必要最小限のカラムを、適切な順序で列挙する必要があります。
なぜなら、登場しているカラムの更新時に再生成が走りますし、適切な順序でなければ使用してもらえません。
まず考えないといけないこと
SQL文中の、各部位ごとの評価順に並べる必要があります。
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. HAVING
7. SELECT
8. DISTINCT
9. ORDER BY
10. TOP(LIMIT)
引用:SELECT文の評価順序の話より
SELECT文章の各評価順ごとに順番に取り出して並べていきましょう。
その際、各部位中での順番は気にする必要はないようです。例えば、WHEREでA,C,Bの順番で使われているときにA,B,Cの順序で書いても構いません。
ただ、評価順の部位をまたいで使われている場合はどうなるか不明です。(誰か追試求む!w)
おまけ
実装によっては、ORDER BYに使ってほしいカラムについては、インデックスにも同じ向きで作成しておかないといけないことがあります。(例:MySQLの古いバージョン)
その場合はその分だけが異なるINDEXを別々に作成する必要があります。