MYSQL INDEX作成

INDEXを使用すればいい時のまとめやら
のっててわかりやすかったサイト

http://www.res-system.com/weblog/item/550





参考サイトのまとめ引用↓

MySQLがindexを活用する時

フィールド値を定数と比較するとき(WHERE name = "hogehoge")
フィールド値全体でJOINするとき(WHERE a.name = b.name)
フィールド値の範囲を求める時
LIKEで文字列の先頭が固定な時
MIN(),MAX()(複数要素indexの同一firstfieldでsecondfieldのmin,maxでも有効)
文字列のプレフィックスをもとにしたORDER BY,GROUP BY
WHEREのすべてのフィールドがindexの一部の場合(DBまったく参照されず)


indexが使われない時

LIKEがワイルドカードで始まる時
DB全体を読んだ方が早いとMySQLが判断した時
通常はindexはORDER BYには使われない
WHEREとORDER BYのフィールドが違う時にはどちらかしか使われない

Extrasで見たくないもの:using filesort(余分なソート)、using temporary(一時ファイルの作成)
Extrasで見たいもの:using index(DB本体を読む必要なし)、Where used(type:ALLとの組み合わせだとindex作成推奨)


SELECTの最適化
LEFT JOIN, STRAIGHT JOINとUSINGの組み合わせはWHEREより早い
WHERE field INはかなり早い
WHEREが使えるならHAVINGは使うな(HAVINGはindex使わず)
なるべく簡単なステートメントを(オプティマイザが働きやすい)