MySQL

【MySQL】インデックスが効くパターンと効かないパターン

MySQLを使っていて、パフォーマンスが著しく悪くなってしまい結構ハマってしまった。

いろいろ試した結果、インデックスの設定が間違っていたことが分かったので、ここにメモしておきます。

シンプルに、インデックスが効くパターンと効かないパターンを箇条書きにしてまとめました。

インデックスが効くパターン

  • 検索カラムがインデックスの第1カラム
  • 数値 or 文字列型数値で等号/不等号条件
  • 数値型 or 文字列型(日付型 以外)で等号/不等号/IN句/BETWEEN句/前方一致のLIKE検索
  • 日付型(TIMESTAMPとDATETIME) で等号/不等号/IN句/BTWEEN句
  • AND条件
  • IS NULL/IS NOT NULL( MySQL 4.1.22 )

インデックスが効かないパターン

  • 検索カラムがインデックスの第2カラム以降のみ
  • 複合インデックスの第1カラムを使っていても、指定する順番を間違えている
     「第1カラム = ** AND 第2カラム = **」 => インデックスが効く
     「第2カラム = ** AND 第1カラム = **」 => インデックスが効かない
  • 日付型(TIMESTAMPとDATETIME)でLIKE検索
  • OR条件
  • 後方一致のLIKE検索
  • IN句とサブクエリの組み合わせ
  • 関数の使用

参考:http://d.hatena.ne.jp/LukeSilvia/20100322/p1

-MySQL