Edited at

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

    ソートを行っている。適切なインデックスを

    張ることで改善されるかもしれないことを表す。