45
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

最低限押さえておきたい EXPLAIN の見かた

Posted at

EXPLAIN とは

SELECT 文の前に記載して実行することで、その SELECT 文のデータへのアクセス方法を知ることができます。
SELECT 文の実行に時間がかかっている場合や、index を張ったが意図通りに使用されているのかの確認などに使うことができます。
ただ、EXPLAIN の結果は見方が難しいため、少しまとめてみます。

MySQL> EXPLAIN SELECT * FROM hoge;

select_type

単一の表を参照する場合には SELECT になる。UNION を使用すると、PRIMARY, UNION, 'UNION RESULT' などが現れる。

type

type はレコードアクセスタイプとも呼ばれ、そのテーブルにどのようにアクセスするのかを表しています。
実行速度が遅い場合は、ここを見ることで原因が分かる場合があります。

type の種類

  • const
    • PK や UNIQUE インデックスの等価検索時のタイプ
    • 問題なし
  • ref
    • UNIQUE 出ないインデックス使用検索時
    • 大抵問題なし
    • セカンダリインデックスを禁止していたら問題あり
  • range
    • Index を用いた範囲検索時
    • ちょっと注意
  • index
    • index 内のフルスキャン
    • かなり注意
    • 場合によってはダメ
  • ALL
    • 全表操作
    • すごく小さいことが保証されるテーブルの参照以外は改善が必要

key

key には PRIMARY KEY かセカンダリインデックス名が入っているべきであり、もしセカンダリインデックスを禁止しているとすると、PRIMARY KEY 以外入ってはならない

possible_keys

使うことのできる key の候補。ここから一番効率がいいと思われる key が選択される。

ヒント句

SELECT 文に key に対するヒント句を付与することで、使ってほしい key を指定することができる。(インデックスヒントの構文)

SELECT * FROM t1 USE INDEX (i1);
SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX FOR ORDER BY (i2) ORDER BY a;

Extra

付帯情報であるが、かなり大事な項目。

Extra の内容

  • Using where
    • 頻繁に出力される追加情報で、あまり気にする必要はない
  • Using index
    • クエリがインデックスだけを用いて解決できることを示す
    • Covering Index を使用している場合などに表示される
    • Using index が Extra に表示されるようにインデックスを貼るのが一つの目標
  • Using index condition
    • クエリがインデックスの値を一部利用できることを示す
  • Using filesort
    • filesort(クイックソート) でソートを行っていることを示す
    • これが出ている場合は、インデックスをうまく使ってソートをしなくてすむ設計にできないかを考える
45
39
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
45
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?