Explain

データベース EXPLAIN 指令しれい結果けっか詳細しょうさい解説かいせつ

MySQL EXPLAIN

select_type の詳細

種類しゅるい説明せつめい
SIMPLE単純たんじゅんなクエリ、サブクエリや UNION をふくまない
PRIMARYもっと外側そとがわの SELECT クエリ
UNIONUNION の2番目ばんめ以降いこうの SELECT
DEPENDENT UNION外部がいぶクエリに依存いぞんする UNION の SELECT
UNION RESULTUNION クエリの結果けっかセット(一時いちじテーブル)
SUBQUERYSELECT 、WHERE、HAVING 最初さいしょのサブクエリ
DEPENDENT SUBQUERY外部がいぶクエリに依存いぞんするサブクエリ
DERIVED派生はせいテーブル(FROM のサブクエリ)
MATERIALIZEDマテリアライズドサブクエリ、MySQL 5.6+ の最適化さいてきか
UNCACHEABLE SUBQUERYキャッシュ不可ふかのサブクエリ
UNCACHEABLE UNIONキャッシュ不可ふかの UNION

type の詳細(効率の高い順)

種類しゅるい説明せつめい
systemテーブルに1ぎょうのみ(const の特例とくれい
constしゅキーまたはユニークインデックスの等値とうちクエリ、最大さいだい1ぎょう
eq_refしゅキーまたはユニーク非NULL インデックスの結合けつごうクエリ
ref非ユニークインデックススキャン
fulltext全文ぜんぶんインデックスを使用しよう
ref_or_nullref と同様どうようだが NULL 検索けんさく
index_mergeインデックスマージ最適化さいてきか複数ふくすうインデックスを使用しよう
unique_subqueryIN サブクエリの最適化さいてきか
index_subqueryunique_subquery と同様どうようだが非ユニークインデックス
range指定してい範囲はんいのみスキャン
indexぜんインデックススキャン
ALLぜんテーブルスキャン、効率こうりつ最低さいてい

Extra フィールドの詳細

あたい説明せつめい
Using indexカバリングインデックス、インデックスのみ使用しよう
Using whereWHERE でフィルタリング
Using temporary一時いちじテーブルを作成さくせい
Using filesort外部がいぶソートを使用しよう、パフォーマンス問題もんだい可能性かのうせい
Using join buffer結合けつごうバッファを使用しよう
Impossible WHEREWHERE つねに false
Using index conditionインデックスコンディションプッシュダウン(ICP)
Using MRRマルチレンジリード最適化さいてきか

rows と filtered の解釈

rows:MySQL が検査けんさする必要ひつようがあると推定すいていする行数ぎょうすうひくいほどい。

filtered条件じょうけんでフィルタリングのこぎょう割合わりあい(%)。実際じっさい検査けんさするぎょうrows × filtered%

PostgreSQL EXPLAIN

ノードタイプの詳細

種類しゅるい説明せつめい
Seq Scanシーケンシャルスキャン、テーブル全体ぜんたい
Index Scanインデックススキャン、インデックスにテーブルアクセス
Index Only Scanインデックスオンリースキャン、もっと効率的こうりつてき
Bitmap Scanビットマップスキャン、一致いっちぎょうのビットマップを作成さくせい
Nested Loopネステッドループ結合けつごう
Hash Joinハッシュ結合けつごう
Merge Joinマージ結合けつごう、ソートみデータを並行へいこうスキャン
Sortソート操作そうさ
Limitもど行数ぎょうすう制限せいげん
Aggregate集約しゅうやく関数かんすう操作そうさ

cost 値の意味

  • 単位:ディスクページ取得しゅとく基準きじゅん
  • startup cost最初さいしょ出力しゅつりょくぎょう生成せいせいするまでのコスト
  • total cost:すべての出力しゅつりょくぎょう生成せいせいするそうコスト
cost=0.42..1.42 rows=10 width=14
  • 0.42:最初さいしょぎょう生成せいせいするコスト
  • 1.42:すべての10ぎょうそうコスト
  • かくぎょう平均へいきんはば 14 バイト

actual time(EXPLAIN ANALYZE 使用時)

actual time=0.015..0.018 rows=10 loops=1
  • 0.015ms:最初さいしょぎょう取得しゅとくする時間じかん
  • 0.018ms:すべてのぎょう処理しょりするそう時間じかん
  • loops:ノードの実行じっこう回数かいすう
  • そう実際じっさい時間じかん = actual time × loops

バッファ情報(EXPLAIN (ANALYZE, BUFFERS) 使用時)

指標しひょう説明せつめい
shared hit共有きょうゆうバッファからんだブロックすう
shared readディスクから共有きょうゆうバッファにんだブロックすう
shared dirtiedクエリによって変更へんこうされた共有きょうゆうバッファブロックすう
shared written共有きょうゆうバッファからディスクにんだブロックすう
temp read/written一時いちじファイルの

Filter と Index Cond の違い

  • Index Cond:インデックスで直接ちょくせつ一致いっちぎょう検索けんさく、より効率的こうりつてき
  • Filterぎょう取得しゅとくにフィルタリング

MongoDB EXPLAIN

verbosity モード

モード説明せつめい
queryPlannerデフォルト、クエリ計画けいかくのみ表示ひょうじ
executionStats実行じっこう統計とうけいふく
allPlansExecutionすべての計画けいかく統計とうけいもっと詳細しょうさい

stage の詳細

Stage説明せつめいパフォーマンス
COLLSCANコレクションスキャン、すべてのドキュメントをスキャン最低さいてい
IXSCANインデックススキャン効率的こうりつてき
FETCHインデックスから情報じょうほう取得後しゅとくごドキュメントを中程度ちゅうていど
SORTメモリソート、インデックスが使つかえない場合ばあい⚠️ 問題もんだい可能性かのうせい
LIMITもどすドキュメントすう制限せいげん
SKIP指定していすうのドキュメントをスキップ⚠️ 大量たいりょう SKIP は問題もんだい
IDHACK_id フィールドの特別とくべつ最適化さいてきか効率的こうりつてき
COUNT_SCANインデックスでカウント
PROJECTION_COVEREDすべてのフィールドがインデックスにふくまれる最高さいこう

executionStats の主要指標

指標しひょう説明せつめい
nReturnedクライアントにかえされたドキュメントすう
executionTimeMillis実行じっこう時間じかん(ミリびょう
totalKeysExaminedスキャンしたインデックスキーの総数そうすう
totalDocsExaminedスキャンしたドキュメントの総数そうすう

クエリ効率の判断基準

最良さいりょうのケースnReturned ≈ totalKeysExamined ≈ totalDocsExamined
  • インデックスカバリングクエリ:totalKeysExamined > 0 かつ totalDocsExamined = 0
  • インデックス効率こうりつ:totalKeysExamined / nReturned 比率ひりつは 1:1 にちかいべき
  • ドキュメントスキャン効率こうりつ:totalDocsExamined / nReturned 比率ひりつは 1:1 にちかいべき

危険信号

  • おおきなコレクションでの COLLSCAN
  • totalDocsExamined » nReturned(必要ひつよう以上いじょうのドキュメントをスキャン)
  • たかい executionTimeMillis だがひくい nReturned
  • SORT ステージで memUsage が memLimit にちか

クエリ最適化の典型例

COLLSCAN の改善

問題: { stage: "COLLSCAN", totalDocsExamined: 10000, nReturned: 10 }
解決: クエリ条件に適したインデックスを作成

インデックス効率低下

問題: { stage: "IXSCAN", totalKeysExamined: 5000, nReturned: 10 }
解決: より精確な複合インデックスを作成

ソートがインデックスを使用しない

問題: { stage: "SORT", executionTimeMillis: 500, memUsage: 30000000 }
解決: ソートフィールドを含むインデックスを作成

SKIP の効率問題

問題: 大量の SKIP でページネーション
解決: 前回のクエリ結果に基づく条件(例:{ _id: { $gt: lastId } })

関連トピック