explainの使い方
mysql>explain select a, b, c from table_A where a = 1 or b = 3;
悪い結果
using filesort(余分なソート)
using temporary(一時ファイルの作成)
これは、テンポラリーのバッファが利用されるので、
ORDER BY があったり、count(*) 検索していたりすると、
頻発する気がする。
いい結果
using index(DB本体を読む必要なし)、
Where used(type:ALLとの組み合わせだとindex作成推奨)"
優先順位は以下の順番で、cont とか、eq_ref 出るとベスト♪
cont − 1つのレコードを選択。テーブルに1レコードしか存在しない
eq_ref − 1つのレコードを選択。(プライマリキー、ユニークキーを使用)
ref − インデックスを使用してレコードを選択
ref_or_null − ref と同じ状態だが、レコードにNULLが含まれる
range − インデックスを使用してある範囲のレコードを選択
index − インデックスを全件頭からなめることになる
ALL − テーブル内のすべてのレコードを検索対象とする(インデックスを使わない。データを全件頭からなめることになる)
http://blog.goo.ne.jp/ketoyada/e/bbf6510489807af64b52a0f499abeb68
EXPLAINで判断できない場合は
show statusを使う
mysql> show status like 'handler_read_%';