はかますたいる!きょろの技的雑記

井上恭輔(@kyoro353)の私的かつ技的な日記です。米国サンフランシスコで暮らすエンジニアです。

MySQLのクエリ最適化

MySQL4.0(古い!)の複合インデックスに悩まされたので、まとめておく。

  • 複合インデックスは順番が大事!
    • WHERE句の順番に、しかも使うものは全部インデックス張ろう
    • インデックスが(hoge,moe,miko) のとき、hoge=? AND moe=?では使われるけど、miko=? では使われない。
  • ORDER BY 句に使うものも全部張る
  • PRIMARY KEY が含まれる場合は一意にレコードが特定されるので、全ての複合インデックスは使用されない。(使用しても無駄)
    • ゆえに、id系を含めて複合インデックスを張る意味は無い
  • JOINする場合は別々に
  • とにかく、まずはEXPLAINでおk
  • 解析には本家リファレンスを参照

めんどくせー!
どうやらMySQL5系だとオプティマイザが幾分優秀らしい。

続きは明日やろう…。がんばろう!!