LoginSignup
1
1

More than 1 year has passed since last update.

【MySQL】はじめてのクエリチューニング vol.3 複合インデックスとSQLの評価順序

Last updated at Posted at 2020-01-24

複合インデックスを作成する際に注意しなければいけないSQLの評価順序との関係について説明します
mysql.jpg

目次

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の評価順序が逆転しています

この場合インデックスは無効になってしまいます

インデックス作成でカラムを指定するときは、評価順序を意識しましょう

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1