LoginSignup
87
72

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-01-23

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

87
72
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
87
72