✏️

SQLのEXPLAINについてざっくりしたメモ

2022/02/23に公開

MySQLのEXPLAINについてざっくりとしたメモ

EXPLAINを使うことでSQLの実行計画を確認できる

  • 実行クエリ例
EXPLAIN SELECT id FROM users WHERE id = 1;
  • 実行結果例
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE users NULL ref PRIMARY PRIMARY 4 const 1 100.00 Using index

SQLの速度改善をする場合は、type、rows、Extraなどを確認して改善することが多い

  • id: SELECTの実行順序
  • select_type: SELECTのタイプ
    • SIMPLE: 単一のテーブル
    • PRIMARY: 外部クエリ
    • DERIVED: FROM句のサブクエリ
    • SUBQUERY: サブクエリ
    • etc.
  • table: 対象のテーブル
  • partitions: テーブルパーティション
  • type: テーブルの結合方法、スキャン方法
    • const
      • プライマリキー、ユニークキーのインデックスを使用したルックアップによるアクセス
      • 最も実行速度が速い
    • eq_ref
      • joinでのconst
      • constの次に速い
    • ref
      • constでないインデックスを使った等価検索
      • eq_refの次に速い
    • range
      • インデックスを使った範囲検索
      • refの次に速い
    • index
      • フルインデックススキャン
      • インデックス全体をスキャンしているので遅い
      • あまり良くないのでクエリを改善した方がいい
    • all
      • フルテーブルスキャン
      • インデックスが使用されていなため遅い
      • あまり良くないのでクエリを改善した方がいい
  • possible_keys: オプティマイザが利用可能と判断したインデックス
  • key: オプティマイザが使用したキー
  • key_length: キーの長さ。短い方が高速
  • ref: 検索条件でkeyと比較されている値またはカラム
  • rows: 行数の見積もり。多い場合は注意する
  • Extra: オプティマイザが選択した戦略。Using index、Using whereとかだと安心

Discussion