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_%';


MySQL のクエリ最適化における、もうひとつの検証方法