定義
explainexplainコマンドは、次のコマンドの実行に関する情報を提供します:aggregate、count、 、distinct、 、 、findfindAndModifydelete、mapReduceupdate。Tip
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 | 任意。 を実行するモードを指定する 使用可能なモードは次のとおりです。
モードの詳細については、 explain の動作 を参照してください。 |
| any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。
コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。
|
動作
冗長モード
explainの動作と返される情報の量は、 verbosityモードによって異なります。
MongoDB はクエリオプティマイザを実行して、評価中の操作に最適なプランを選択します。explain は評価された <command> の queryPlanner 情報を返します。
MongoDB では、クエリ オプティマイザーが実行され、勝利プランが選択され、勝利プランが完了まで実行され、勝利プランの実行を説明する統計が返されます。
書込み操作の場合、 explainは実行されるアップデート操作または削除操作に関する情報を返しますが、変更はデータベースに適用されません。
explain は評価された <command> の queryPlanner と executionStats 情報を返します。ただし、 executionStats拒否されたプランのクエリ実行情報を提供しません。
デフォルトでは、 explainは"allPlansExecution"の冗長モードで実行されます。
また、クエリ オプティマイザーが実行されて最適なプランが選択され、そのプランは完了まで実行されます。"allPlansExecution" モードでは、MongoDBにより、勝利したプランの実行を説明する統計情報と、プランの選択中に取得された他の候補プランの統計情報が返されます。
書込み操作の場合、 explainは実行されるアップデート操作または削除操作に関する情報を返しますが、変更はデータベースに適用されません。
explain は評価された <command> の queryPlanner と executionStats 情報を返します。executionStats には、選出されたプランの完了したクエリ実行情報が含まれます。
クエリオプティマイザが複数のプランを考慮した場合、executionStats 情報には、選択された候補プランと拒否された候補プランの両方について、 プラン選択フェーズ中にキャプチャされ た部分的な実行情報も含まれます。
Explain 操作と Write 操作
書込み (write) 操作の場合、explain コマンドは実行される書込み (write) 操作に関する情報を返しますが、実際にはデータベースを変更しません。
Stable API
Stable API V1 は、explain コマンドに対して次の冗長モードをサポートしています。
警告
MongoDB では、Stable API を使用する場合でも、 explainコマンドからの特定の出力形式は保証されません。
制限事項
$out ステージを含む aggregation pipeline に対して、explain コマンド /db.collection.explain() を executionStats モードまたは allPlansExecution モードで実行することはできません。代わりに、次のいずれかを実行できます。
出力
explain 操作は、次の情報を返す場合があります。
explainVersion、出力形式のバージョン(例:"1")command、説明されているコマンドの詳細が表示されます。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 } } } ] } } )