MongoDB とドライバー
説明
db.collection.explain()次のメソッドのクエリ プランに関する情報を返します。
を使用するには、前述のメソッドのいずれかを
db.collection.explain()db.collection.explain()に追加します。db.collection.explain().<method(...)> たとえば、
db.products.explain().remove( { category: "apparel" }, { justOne: true } ) その他の例については、「例」を参照してください。 db.collection.explain().help() も参照してください。
パラメーター
db.collection.explain()メソッドには次のパラメーターがあります。
Parameter | タイプ | 説明 |
|---|---|---|
| string | 任意。 explain 出力の冗長モードを指定します。 モードは
以前のバージョンの このモードについて詳しくは、「冗長モード」を参照してください。 |
注意
db.collection.explain() explainコマンドはデフォルトでallPlansExecutionになりますが、このコマンドはデフォルトでqueryPlannerになります。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
必要なアクセス権
explain を使用するには、基礎のコマンドを実行する権限が必要です。
動作
注意
explainを使用すると、既存のすべてのプラン キャッシュ エントリが無視され、MongoDB クエリ プランナーが新しいプラン キャッシュ エントリを作成できなくなります。
冗長モード
db.collection.explain()の動作と返される情報の量は、verbosity モードによって異なります。
デフォルトでは 、db.collection.explain() は 冗長モードで実行されます。queryPlanner
MongoDB はクエリオプティマイザを実行して、評価中の操作に最適なプランを選択します。db.collection.explain() は評価されたメソッドのqueryPlanner 情報を返します。
MongoDB では、クエリ オプティマイザーが実行され、勝利プランが選択され、勝利プランが完了まで実行され、勝利プランの実行を説明する統計が返されます。
書込み操作の場合、db.collection.explain() は実行されるアップデートまたは削除操作に関する情報を返しますが、変更はデータベースに適用されません。
db.collection.explain()queryPlannerは評価されたメソッドのexecutionStats とexecutionStats 情報を返します。ただし、 では拒否されたプランのクエリ実行情報は提供されません。
また、クエリ オプティマイザーが実行されて最適なプランが選択され、そのプランは完了まで実行されます。"allPlansExecution" モードでは、MongoDBにより、勝利したプランの実行を説明する統計情報と、プランの選択中に取得された他の候補プランの統計情報が返されます。
書込み操作の場合、db.collection.explain() は実行されるアップデートまたは削除操作に関する情報を返しますが、変更はデータベースに適用されません。
db.collection.explain()queryPlannerは評価されたメソッドのexecutionStats とexecutionStats 情報を返します。 には、当選プランの 完了した クエリ実行情報が含まれます。
クエリオプティマイザが複数のプランを考慮した場合、executionStats 情報には、選択された候補プランと拒否された候補プランの両方について、 プラン選択フェーズ中にキャプチャされ た部分的な実行情報も含まれます。
Explain 操作と Write 操作
書込み(write)操作の場合、db.collection.explain() は実行される書込み(write)操作に関する情報を返しますが、実際にはデータベースを変更しません。
制限事項
ステージを含む では、aggregation pipeline $outexplainモードまたはdb.collection.explain() executionStatsallPlansExecutionモードで コマンド/ を実行できません。代わりに、次のいずれかを実行できます。
queryPlannerモードで explain を実行するか、
explain() Mechanics
メソッドはdb.collection.explain() explainコマンドをラップし、explain を実行するための推奨方法です。
db.collection.explain().find()はdb.collection.find().explain() と似ていますが、次の重要な違いがあります。
db.collection.explain().find()構造により、クエリ修飾子の追加の連鎖が可能になります。クエリ修飾子のリストについては、 db を参照してください。 コレクション.explain().find().help()db.collection.find().explain()explain()は、クエリプランに関する 情報を返します。
db.collection.explain().aggregate()は explain db.collection.aggregate()オプションを メソッドに渡すことと同じです。
help()
db.collection.explain()でサポートされている操作のリストを表示するには、次のコマンドを実行します。
db.collection.explain().help()
db.collection.explain().find()はカーソルを返します。これにより、クエリ修飾子の連鎖が可能になります。 でサポートされているクエリ修飾子とカーソル関連のメソッドのリストを表示するには、次のコマンドを実行します。db.collection.explain().find()
db.collection.explain().find().help()
には複数の修飾子を連鎖させることができます。例については、「 を修飾子で説明するdb.collection.explain().find() find()」を参照してください。
シャーディングされたクラスター
バージョン8.3の新機能。
シャーディングされたクラスターに存在しないデータベースに対して db.collection.explain() を実行すると、実行ステージはストリームの終端に達し、操作データベースは作成されません。ストリームの終端の実行統計の詳細については、explain.executionStats.executionStages.isEOF を参照してください。
出力
db.collection.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 モード
デフォルトでは 、db.collection.explain() は 冗長モードで実行されます。"queryPlanner"
db.collection.explain()次の例では、"queryPlanner" をcount() 冗長モードで実行し、指定された 操作のクエリ計画情報を返します。
db.products.explain().count( { quantity: { $gt: 50 } } )
executionStats モード
db.collection.explain()次の例では、"executionStats" をfind() 冗長モードで実行し、指定された 操作のクエリ計画と実行情報を返します。
db.products.explain("executionStats").find( { quantity: { $gt: 50 }, category: "apparel" } )
allPlansExecution モード
db.collection.explain()次の例では、"allPlansExecution" 冗長モードで を実行しています。db.collection.explain() は、指定されたqueryPlanner 操作のすべての検討済みプランのexecutionStatsfindAndModify() と を返します。
注意
この explain を実行してもデータは変更されませんが、アップデート操作のクエリ述語が実行されます。候補プランの場合、MongoDB ではプラン選択フェーズ中に取得された実行情報が返されます。
db.products.explain( "allPlansExecution" ).findAndModify( { query: { name: "Tom", state: "active", rating: { $gt: 10 } }, sort: { rating: 1 }, update: { $inc: { score: 1 } } } )
修飾語 を使って find() を説明する
db.collection.explain().find()構造により、クエリ修飾子の連鎖が可能になります。例、次の操作では、find() sort()クエリ修飾子とhint() クエリ修飾子を持つ メソッドに関する情報が提供されます。
db.products.explain("executionStats").find( { quantity: { $gt: 50 }, category: "apparel" } ).sort( { quantity: -1 } ).hint( { category: 1, quantity: -1 } )
使用可能なクエリ修飾子のリストについては、mongosh で以下を実行します。
db.collection.explain().find().help()
finish() メソッドで explain() の結果にアクセスする
はdb.collection.explain().find() explain()の結果を返します。 で対話的に実行する場合は、 メソッドを使用してクエリプランにアクセスできます。mongosh.finish()
db.products.explain().find( { category: "apparel" } ).finish().queryPlanner.winningPlan;