複合インデックスを作成する際に注意しなければいけないSQLの評価順序との関係について説明します
目次
1.インデックス作成
2.インデックス削除
3.複合インデックス作成
4.評価順序
インデックス作成
インデックス作成のメリット・デメリットについては別記事で
https://qiita.com/okasir4444/items/2cd98b430481c433d6f5
任意のインデックス名をつけて下記のクエリで作成できます
ALTER TABLE テーブル名 ADD INDEX インデックス名(カラム名);
インデックス削除
ちなみに削除はこのように記述します
ALTER TABLE テーブル名 DROP INDEX インデックス名;
複数のカラムを指定することもでき、これを複合インデックスと言います
複合インデックス作成
ALTER TABLE テーブル名 ADD INDEX インデックス名(カラム名1, カラム名2);
この指定するカラムの組み合わせによって、処理速度が大きく変わります
SQLの評価順序
そして作成するとき、カラム名の順番が非常に大事です
SQLの評価順序にのっとって記述しないとインデックスが有効になりません
評価順序 = SQLが実行される順番です
上から順に実行されていきます
FROM
ON
JOIN
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
ORDER BY
LIMIT
例えばこのようにインデックスを作成したとき
ALTER TABLE users ADD INDEX XXX(col1, col2);
下記のクエリだと評価順序を守っているのでインデックスは有効です
SELECT * FROM users WHERE col1 = Z ORDER BY col2;
ではこちらはどうでしょうか
SELECT * FROM users WHERE col2 = Z ORDER BY col1;
3.WHERE句にcol2、8.ORDER BYにcol1が記述されていて、インデックスの記述順とSQLの評価順序が逆転しています
この場合インデックスは無効になってしまいます
インデックス作成でカラムを指定するときは、評価順序を意識しましょう