個人的にMYSQLのEXPLAINを見て注意すること
こんにちは、つじたく(@Tsuji_Taku50)です。
この記事は2年ほど前にQiitaに投稿した記事に少し修正を加えたものになります。 qiita.com
新しく得た知識なども、この記事に追記していこうと思います。
EXPLAINについて
MYSQLにはEXPLAINというものがあります。
これはクエリを実行した際に、
「MYSQLが作成したクエリをどのように判断して実行したのか」
というものが見れるようなものです。
言い換えると
「MYSQLが内部的にどのようにしてデータへのアクセスをしているか」
ということになります。
EXPLAINの実行方法
実行方法は簡単でSQLクエリの先頭にEXPLAINをつけるだけです。
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・・・ソートを行っています。適切なインデックスを張ることで改善されるかもしれないことを表しています。
さいごに
EXPLAINは僕にとってまだまだ未知の領域で使いこなすのが難しいですが、
勉強を続けていきたいですね。
おわり!!