EXPLAIN 結果をどう見るか
id/select_type
サブクエリやUNIONを使った場合に、どういう順序でクエリが実行されるかが分かる。シンプルなクエリ(サブクエリやUNIONを含まない)の場合は SIMPLE
が表示される。
table/type
どのテーブルにアクセスするかと、対象のテーブルにどうやってアクセスするか。
const
– PRIMARY KEY か UNIQUE KEY が使われる。これが一番はやいeq_ref
– const の JOIN 版。ref
– PRIMERY KEY / UNIQUE KEY 以外のインデックスが使われるかつ、条件が=
のもの。range
– インデックスを使った範囲検索index
– インデックスのフルスキャン。遅いALL
– テーブルのフルスキャン。インデックスが使われない
index
や ALL
になっている場合は改善が必要。
possible_keys/key/key_len
使えそうなキーの一覧と実際に選択されたキー、そして選択されたキーの長さ。キーは短いほうがパフォーマンスが良い
ref
keyと比較されている値の種類。定数なら const 、JOIN してるときは結合先のテーブルのカラムが表示される
rows
フェッチされる行数の見積もり。見積もりなので正確な値ではない。
Extra
テーブルに対してどんなことを行うか。
Using where
– WHERE句が指定されていて、インデックスだけでは網羅できないときに出る。が、頻繁に出るので問題ないUsing index
– インデックスだけでなんとかできる場合に出る。これになりたいUsing index condition
– 一部インデックスが利用されるusing filesort
– ファイルソートが使われる場合に出る。インデックスを使って、ファイルソートしなくて済むようにするのが良いUsing temporary
– テンポラリーテーブルが作成される場合に出る