explain() (実行プランの説明)
最終更新:2026-10-09
explain() (実行プランの説明)
explain() はクエリの実行プランを明らかにします: `db.users.find({ age: { $gt: 20 } }).explain('executionStats')`。結果はインデックス使用、スキャンされたドキュメント数、時間を示し、パフォーマンスチューニングの核となるツールです。引数は 'queryPlanner'(デフォルト、プランのみ)、'executionStats'(実際の実行統計)、'allPlansExecution'(すべての候補プラン)のいずれかです。
| カテゴリ | カーソル |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.find(<filter>).explain(<verbosity>)
⚙️ パラメータ
| モード | 任意。'queryPlanner'、'executionStats'、または 'allPlansExecution'。 |
|---|
戻り値:実行プランと統計を持つドキュメント。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// explain: age のクエリがインデックスを使うか確認する
const plan = db.users.find({ age: { $gt: 20 } })
.explain('executionStats')
print('Docs examined: ' + plan.executionStats.totalDocsExamined)
出力:
Docs examined: 1000
📌 注意事項
- totalDocsExamined が結果件数を大きく上回るのはインデックス不足のサイン
- winningPlan はオプティマイザが選んだ実際のプランを示す
- explain() はプラン情報を返し、実際のデータは返さない
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Qクエリがインデックスを使うかどうかどう判断しますか?
AwinningPlan を確認します。IXSCAN はインデックス使用、COLLSCAN はコレクション全体のスキャンを意味します。
Qexplain の3つのモードの違いは?
AqueryPlanner はプランのみを最速で表示します。executionStats は実際の実行統計を追加し、allPlansExecution はすべての候補プランの詳細を示します。
Qexplain は実際にクエリを実行しますか?
A実行します(queryPlanner モードを除く)。統計は実際の実行から来ますが、ドキュメントは返されません。