定義
explainexplainコマンドは、次のコマンドの実行に関する情報を提供します:aggregate、count、 、distinctfind、findAndModify、delete、mapReduce、updateTip
mongoshでは、このコマンドはdb.collection.explain()およびcursor.explain()ヘルパーメソッドを通じても実行できます。ヘルパー メソッドは
mongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、データベースコマンド を使用します。注意
explainを使用すると、既存のすべてのプラン キャッシュ エントリが無視され、MongoDB クエリ プランナーが新しいプラン キャッシュ エントリを作成できなくなります。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
必要なアクセス権
explain を使用するには、基礎のコマンドを実行する権限が必要です。
構文
このコマンドの構文は、次のとおりです。
db.runCommand( { explain: <command>, verbosity: <string>, comment: <any> } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 |
|---|---|---|
| ドキュメント | 実行情報を返すコマンドを指定するドキュメント。特定のコマンドドキュメントの詳細については、 |
| string | 任意。 を実行するモードを指定する string。モードは 使用可能なモードは次のとおりです。
モードの詳細については、 explain の動作 を参照してください。 |
| any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。
コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。
|
注意
explain と db.collection.explain() のデフォルトの冗長は異なります。explain のデフォルトは allPlansExecution であり、db.collection.explain() のデフォルトは queryPlanner です。
動作
冗長モード
explainの動作と返される情報の量は、verbosity モードによって異なります。
MongoDB はクエリオプティマイザを実行して、評価中の操作に最適なプランを選択します。explain は評価されたqueryPlanner の<command> 情報を返します。
MongoDB では、クエリ オプティマイザーが実行され、勝利プランが選択され、勝利プランが完了まで実行され、勝利プランの実行を説明する統計が返されます。
書込み操作の場合、explain は実行されるアップデートまたは削除操作に関する情報を返しますが、変更はデータベースに適用されません。
explainは評価された のqueryPlanner とexecutionStats <command>情報を返します。ただし、executionStats では拒否されたプランのクエリ実行情報は提供されません。
デフォルトでは 、explain は 冗長モードで実行されます。"allPlansExecution"
また、クエリ オプティマイザーが実行されて最適なプランが選択され、そのプランは完了まで実行されます。"allPlansExecution" モードでは、MongoDBにより、勝利したプランの実行を説明する統計情報と、プランの選択中に取得された他の候補プランの統計情報が返されます。
書込み操作の場合、explain は実行されるアップデートまたは削除操作に関する情報を返しますが、変更はデータベースに適用されません。
explainは評価された のqueryPlanner とexecutionStats <command>情報を返します。executionStats には、当選プランの 完了した クエリ実行情報が含まれます。
クエリオプティマイザが複数のプランを考慮した場合、executionStats 情報には、選択された候補プランと拒否された候補プランの両方について、 プラン選択フェーズ中にキャプチャされ た部分的な実行情報も含まれます。
Explain 操作と Write 操作
書込み(write)操作の場合、explain コマンドは実行される書込み(write)操作に関する情報を返しますが、実際にはデータベースを変更しません。
Stable API
Stable API V1 は、explain コマンドに対して次の冗長モードをサポートしています。
警告
MongoDB、 Stable APIを使用している場合でも、explain コマンドからの特定の出力形式は保証されません。
制限事項
ステージを含む では、aggregation pipeline $outexplainモードまたはdb.collection.explain() executionStatsallPlansExecutionモードで コマンド/ を実行できません。代わりに、次のいずれかを実行できます。
queryPlannerモードで explain を実行するか、
出力
explain 操作は、次の情報を返す場合があります。
explainVersion、出力形式のバージョン("1"など)。command、説明されているコマンドの詳細が表示されます。queryShapeHashは、MongoDB 8.0 以降、クエリシェイプのハッシュを持つ 16 進数文字列です。詳細については、「クエリシェイプ」「クエリシェイプハッシュ」およびexplain.queryShapeHashを参照してください。queryPlannerは、クエリオプティマイザによって選択されたプランの詳細を示し、拒否されたプランを一覧で表示します。executionStats、当選したプランと拒否されたプランの実行の詳細が表示されます。serverInfo、MongoDB インスタンスに関する情報を提供します。serverParameters内部パラメータの詳細が表示されます。
冗長モード(つまり、queryPlanner 、 executionStats 、 allPlansExecution)は、結果にexecutionStatsが含まれるかどうか、およびexecutionStatsにプラン選択中にキャプチャされたデータが含まれるかどうかを決定します。
Explain の出力は、 BSON ドキュメントの最大ネスト深度(100 レベルのネスト)によって制限されます。制限を超える出力は切り捨てられます。
出力の詳細については explain の結果を参照してください。
例
queryPlanner モード
次のexplain コマンドは"queryPlanner" 冗長モードで実行され、 コマンドのクエリ計画情報を返します。count
db.runCommand( { explain: { count: "products", query: { quantity: { $gt: 50 } } }, verbosity: "queryPlanner" } )
executionStats モード
次のexplain 操作は"executionStats" 冗長モードで実行され、count コマンドのクエリ計画と実行情報を返します。
db.runCommand( { explain: { count: "products", query: { quantity: { $gt: 50 } } }, verbosity: "executionStats" } )
allPlansExecution モード
デフォルトでは explain、"allPlansExecution"explain は 冗長モードで実行されます。次の コマンドは、queryPlanner executionStatsコマンドのすべての検討済みプランに対してupdate と を返します。
注意
この explain を実行してもデータは変更されませんが、アップデート操作のクエリ述語が実行されます。候補プランの場合、MongoDB ではプラン選択フェーズ中に取得された実行情報が返されます。
db.runCommand( { explain: { update: "products", updates: [ { q: { quantity: 1057, category: "apparel" }, u: { $set: { reorder: true } } } ] } } )