MySQL

EXPLAINを見て気をつけること(自分なりの忘付録)

More than 3 years have passed since last update.

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
    ソートを行っている。適切なインデックスを
    張ることで改善されるかもしれないことを表す。