💭
SQLの実行計画とは?
先に結論
クエリー実行計画 (つまり、MySQL がクエリーをどのように実行するかの説明) を取得するために使用されます。
一言で言うと、クエリの中で何が行われているかがわかるということ。
EXPLAINを使うと抽出するレコード数、インデックスの使用、JOINの条件などが記載された表が出力されます。
簡単なクエリしか使用しないならば、特に実行計画を行う必要はありません。
しかし、実務の中で複雑なクエリを投げることは往々にしてあります。
そんな時に便利なのがこのEXPLAINです。
EXPLAINって?
こんな形式で書く
EXPLAIN SELECT *
FROM HOGE
INNER JOIN FUGA
ON HOGE.HO = FUGA.FU
WHERE = ...
SELECT, DELETE, INSERT, REPLACE および UPDATEの前にEXPLAIN を付けて実行するだけ。
これによって、テーブルがどのように、どんな順番で結合されているかに関する情報や、処理する方法を教えてくれます。
出力カラム
| カラム | JSON名 | 意味 |
|---|---|---|
| id | select_id | SELECT識別子 |
| select_type | なし | SELECT 型 |
| table | table_name | 出力行のテーブル |
| partitions | partitions | 一致するパーティション |
| type | access_type | 結合型 |
| possible_keys | possible_keys | 選択可能なインデックス |
| key | key | 実際に選択されたインデックス |
| key_len | key_length | 選択されたキーの長さ |
| ref | ref | インデックスと比較されるカラム |
| rows | rows | 調査される行の見積もり |
| filtered | filtered | テーブル条件によってフィルタ処理される行の割合 |
| Extra | なし | 追加情報 |
重要なのはtypeです。ここにはテーブルの結合方法が示されます。
適切なものから、不適切なものまで存在し、ここを修正することで処理効率が改善される可能性が高いです。
詳しくはMySQL公式を見た方がわかりやすいので割愛。
参考
Discussion