@kyanny's blog

My life. Opinions are my own.

MySQL のインデックスは ORDER BY 句にかかる部分も含めてはること

SELECT * FROM table1
WHERE foo > 0
ORDER BY id DESC
LIMIT 100

こんな SQL を発行したいときに、

ALTER TABLE table1 ADD INDEX (foo)

このインデックスだけでは十分ではなく、

ALTER TABLE table1 ADD INDEX (foo, id)

のように複合インデックスをはらないといけない。そうしないと最後の sort の部分で Using filesort とかになってしまい、遅くなる。