✏️
SQLのEXPLAINについてざっくりしたメモ
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
- フルテーブルスキャン
- インデックスが使用されていなため遅い
- あまり良くないのでクエリを改善した方がいい
- const
- possible_keys: オプティマイザが利用可能と判断したインデックス
- key: オプティマイザが使用したキー
- key_length: キーの長さ。短い方が高速
- ref: 検索条件でkeyと比較されている値またはカラム
- rows: 行数の見積もり。多い場合は注意する
- Extra: オプティマイザが選択した戦略。Using index、Using whereとかだと安心
Discussion