MySQL におけるクエリチューニング

dev

EXPLAIN 結果をどう見るか

id/select_type

サブクエリやUNIONを使った場合に、どういう順序でクエリが実行されるかが分かる。シンプルなクエリ(サブクエリやUNIONを含まない)の場合は SIMPLE が表示される。

table/type

どのテーブルにアクセスするかと、対象のテーブルにどうやってアクセスするか。

  • const – PRIMARY KEY か UNIQUE KEY が使われる。これが一番はやい
  • eq_ref – const の JOIN 版。
  • ref – PRIMERY KEY / UNIQUE KEY 以外のインデックスが使われるかつ、条件が = のもの。
  • range – インデックスを使った範囲検索
  • index – インデックスのフルスキャン。遅い
  • ALL – テーブルのフルスキャン。インデックスが使われない

indexALL になっている場合は改善が必要。

possible_keys/key/key_len

使えそうなキーの一覧と実際に選択されたキー、そして選択されたキーの長さ。キーは短いほうがパフォーマンスが良い

ref

keyと比較されている値の種類。定数なら const 、JOIN してるときは結合先のテーブルのカラムが表示される

rows

フェッチされる行数の見積もり。見積もりなので正確な値ではない。

Extra

テーブルに対してどんなことを行うか。

  • Using where – WHERE句が指定されていて、インデックスだけでは網羅できないときに出る。が、頻繁に出るので問題ない
  • Using index – インデックスだけでなんとかできる場合に出る。これになりたい
  • Using index condition – 一部インデックスが利用される
  • using filesort – ファイルソートが使われる場合に出る。インデックスを使って、ファイルソートしなくて済むようにするのが良い
  • Using temporary – テンポラリーテーブルが作成される場合に出る

Reference

タイトルとURLをコピーしました