💭
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