概要

実行結果を用いた分析ができるようにまとめていく

実行計画の出力方法

実行計画結果を表示するには、SQL文の先頭にEXPLAIN を追加

EXPLAIN
SELECT *
FROM users
left join user_organizations on  users.id = user_organizations.user_id
id|select_type|table             |partitions|type|possible_keys                     |key|key_len|ref|rows|filtered|Extra                                     |
--+-----------+------------------+----------+----+----------------------------------+---+-------+---+----+--------+------------------------------------------+
 1|SIMPLE     |users             |          |ALL |                                  |   |       |   |  10|   100.0|                                          |
 1|SIMPLE     |user_organizations|          |ALL |user_organizations_user_id_foreign|   |       |   |  12|   100.0|Using where; Using join buffer (hash join)|

実行結果の内容

カラム 概要 メモ
id 単なる通し番号
select_type 対象のテーブルの操作内容を記載される(SELECT, DELETE)、別テーブル参照
table 該当テーブル
partitions スキーマ定義としてのPARTITONに関する情報
大きなテーブルを小さなセグメントに分割して、大量のデータを効率的に管理・アクセスするようにする
type どのようにデータにアクセスするか。別テーブルで管理
possible_keys 候補となるインデックスの一覧 NULLであれば、改善できる可能性あり
key 実際に使われるインデックス
(カバリングインデックスを使った場合、possible_keysにないインデックスがでてくることがあるかも)
key_len インデックスに使ったカラムの長さ
このキー長が短い方が高速のため、長い場合はハッシュ化してもいいかも
ref インデックスと比較する定数またはカラム。JOINされている場合は、JOIN先のカラムが表示される
rows クエリに実行する時に取ってくる行数。
JOIN後の場合は、JOIN元レコードに対しての行数 大きいほどクエリも大きい
filtered フィルタされていない割合。100だとフィルターされていない。

select_typeの詳細

select_typeの値 JSON名 意味
SIMPLE なし 単純な SELECT (UNION やサブクエリーを使用しません)
PRIMARY なし もっとも外側の SELECT
UNION なし UNION 内の 2 つめ以降の SELECT ステートメント
DEPENDENT UNION dependent (true) UNION 内の 2 つめ以降の SELECT ステートメントで、外側のクエリーに依存します
UNION RESULT union_result UNION の結果。
SUBQUERY なし サブクエリー内の最初の SELECT
DEPENDENT SUBQUERY dependent (true) サブクエリー内の最初の SELECT で、外側のクエリーに依存します
DERIVED なし 導出テーブル
DEPENDENT DERIVED dependent (true) 別のテーブルに依存する導出テーブル
MATERIALIZED materialized_from_subquery 実体化されたサブクエリー
UNCACHEABLE SUBQUERY cacheable (false) 結果をキャッシュできず、外側のクエリーの行ごとに再評価される必要があるサブクエリー
UNCACHEABLE UNION cacheable (false) キャッシュ不可能なサブクエリー (UNCACHEABLE SUBQUERY を参照してください) に属する UNION 内の 2 つめ以降の SELECT

typeの詳細

typeの値 概要
system テーブルに行が一つしかないケース
const 主キーまたはユニークインデックスで検索する際のアクセス

参考記事