MySQLのクエリ最適化
MySQL4.0(古い!)の複合インデックスに悩まされたので、まとめておく。
- 複合インデックスは順番が大事!
- WHERE句の順番に、しかも使うものは全部インデックス張ろう
- インデックスが(hoge,moe,miko) のとき、hoge=? AND moe=?では使われるけど、miko=? では使われない。
- ORDER BY 句に使うものも全部張る
- PRIMARY KEY が含まれる場合は一意にレコードが特定されるので、全ての複合インデックスは使用されない。(使用しても無駄)
- ゆえに、id系を含めて複合インデックスを張る意味は無い
- JOINする場合は別々に
- とにかく、まずはEXPLAINでおk
- 解析には本家リファレンスを参照
めんどくせー!
どうやらMySQL5系だとオプティマイザが幾分優秀らしい。
続きは明日やろう…。がんばろう!!