explain
定義
explain
explain
コマンドは、次のコマンドの実行に関する情報を提供します:aggregate
、count
、distinct
、find
、findAndModify
、delete
、mapReduce
、およびupdate
。Tip
mongosh
では、このコマンドはdb.collection.explain()
およびcursor.explain()
ヘルパー メソッドを通じて実行することもできます。ヘルパー メソッドは
mongosh
ユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。注意
explain
を使用すると、既存のすべてのプラン キャッシュ エントリが無視され、MongoDB クエリ プランナーが新しいプラン キャッシュ エントリを作成できなくなります。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
db.runCommand( { explain: <command>, verbosity: <string>, comment: <any> } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 |
---|---|---|
explain | ドキュメント | 実行情報を返すコマンドを指定するドキュメント。特定のコマンドドキュメントの詳細については、 aggregate 、 count 、 distinct 、 find 、 findAndModify 、 delete 、 mapReduce 、およびupdate を参照してください。 |
verbosity | string | 任意。 使用可能なモードは次のとおりです。
モードの詳細については、 explain の動作 を参照してください。 |
comment | 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
、説明されているコマンドの詳細が表示されます。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 } } } ] } } )