##EXPLAINについて
mysqlにはexplainというものがある。
これはクエリを実行した際に、
「mysqlが作成したクエリをどのように判断して実行したのか」というものが
見れるようなものです。
(データへのアクセス方法がわかるものです。)
####使い方
使い方は簡単でSQL文の一番先頭にexplainをつけるだけです。
ex)
EXPLAIN SELECT * FROM テーブル名;
結果)
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
| 1 | SIMPLE | emp | ALL | NULL | NULL | NULL | NULL | 62004 | |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
1 row in set (0.00 sec)
だいたいこんな感じのものが表示される
####カラムについて
######select_type
単一の表を参照する場合は「SIMPLE」になるはず。UNIONを使用すると「PRIMARY」「UNION」「UNION RESULT」なども現れるくると思います。
######type
const・・・PKやUNIQUEインデックスの等価検索
ref・・・UNIQUEでないインデックス使用検索時。セカンダリインデックスを禁止していたら問題大あり
range・・・INDEXを用いた範囲検索時
index・・・INDEX内のフルスキャン
ALL・・・全表走査。インデックスが効いていない状態。
######key
keyには「PRIMARY KEY」かセカンダリインデックス名が入っているべき。のはず。
セカンダリインデックスを禁止していればPRIMARY KEY以外入ってはいけない。
######EXTRA(付与情報)
Using where
頻繁に出力される追加情報であまり気にする必要はない
Using index
クエリがインデックスだけを用いて解決できることを示す。
カバリングインデックスを利用している場合などに表示される。
Using filesort
ソートを行っている。適切なインデックスを
張ることで改善されるかもしれないことを表す。