Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

explain

項目一覧

  • 定義
  • 互換性
  • 必要なアクセス権
  • 構文
  • コマンドフィールド
  • 動作
  • 出力
explain

explainコマンドは、次のコマンドの実行に関する情報を提供します: aggregatecountdistinctfindfindAndModifydeletemapReduce 、およびupdate

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>
}
)

このコマンドは、次のフィールドを使用します。

フィールド
タイプ
説明

explain

ドキュメント

実行情報を返すコマンドを指定するドキュメント。特定のコマンドドキュメントの詳細については、 aggregatecountdistinctfindfindAndModifydeletemapReduce 、およびupdate を参照してください。

verbosity

string

任意。 を実行するモードを指定する string。モードはexplain explainの動作に影響し、返される情報の量を決定します。

使用可能なモードは次のとおりです。

  • "queryPlanner"

  • "executionStats"

  • "allPlansExecution" (デフォルト)

モードの詳細については、 explain の動作 を参照してください。

comment

any

任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。

コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。

comment なしで explain を指定すると、 explain に指定されたコマンドのすべての comment が継承されます。

explainの動作と返される情報の量は、 verbosityモードによって異なります。

MongoDB はクエリオプティマイザを実行して、評価中の操作に最適なプランを選択します。explain は評価された <command>queryPlanner 情報を返します。

MongoDB では、クエリ オプティマイザーが実行され、勝利プランが選択され、勝利プランが完了まで実行され、勝利プランの実行を説明する統計が返されます。

書込み操作の場合、 explainは実行されるアップデート操作または削除操作に関する情報を返しますが、変更はデータベースに適用されませ

explain は評価された <command>queryPlannerexecutionStats 情報を返します。ただし、 executionStats拒否されたプランのクエリ実行情報を提供しません。

デフォルトでは、 explain"allPlansExecution"の冗長モードで実行されます。

また、クエリ オプティマイザーが実行されて最適なプランが選択され、そのプランは完了まで実行されます。"allPlansExecution" モードでは、MongoDBにより、勝利したプランの実行を説明する統計情報と、プランの選択中に取得された他の候補プランの統計情報が返されます。

書込み操作の場合、 explainは実行されるアップデート操作または削除操作に関する情報を返しますが、変更はデータベースに適用されませ

explain は評価された <command>queryPlannerexecutionStats 情報を返します。executionStats には、選出されたプラン完了したクエリ実行情報が含まれます。

クエリオプティマイザが複数のプランを考慮した場合、executionStats 情報には、選択された候補プランと拒否された候補プランの両方について、 プラン選択フェーズ中にキャプチャされ た部分的な実行情報も含まれます。

書込み (write) 操作の場合、explain コマンドは実行される書込み (write) 操作に関する情報を返しますが、実際にはデータベースを変更しません。

Stable API V1 は、explain コマンドに対して次の冗長モードをサポートしています。

警告

MongoDB では、Stable API を使用する場合でも、 explainコマンドからの特定の出力形式は保証されません。

$out ステージを含む aggregation pipeline に対して、explain コマンド /db.collection.explain()executionStats モードまたは allPlansExecution モードで実行することはできません。代わりに、次のいずれかを実行できます。

  • queryPlanner モードで explain を実行するか、

  • executionStats モード、または allPlansExecution モードで、$out ステージなしでexplain を実行すると、$out ステージに先行するステージの情報が返されます。

explain 操作は、次の情報を返す場合があります。

  • explainVersion、出力形式のバージョン("1" など)。

  • command、説明されているコマンドの詳細が表示されます。

  • queryPlanner は、クエリオプティマイザによって選択されたプランの詳細を示し、拒否されたプランを一覧で表示します。

  • executionStats、当選したプランと拒否されたプランの実行の詳細が表示されます。

  • serverInfo、MongoDB インスタンスに関する情報を提供します。

  • serverParameters内部パラメータの詳細が表示されます。

冗長モード(つまり、queryPlannerexecutionStatsallPlansExecution)は、結果にexecutionStatsが含まれるかどうか、およびexecutionStatsプラン選択中にキャプチャされたデータが含まれるかどうかを決定します。

Explain の出力は、 BSON ドキュメントの最大ネスト深度(100 レベルのネスト)によって制限されます。制限を超える出力は切り捨てられます。

出力の詳細については explain の結果を参照してください。

次の explain コマンドは "queryPlanner" 冗長モードで実行され、count コマンドのクエリ計画情報を返します。

db.runCommand(
{
explain: { count: "products", query: { quantity: { $gt: 50 } } },
verbosity: "queryPlanner"
}
)

次のexplain操作は"executionStats"冗長モードで実行され、 countコマンドのクエリ計画と実行情報を返します。

db.runCommand(
{
explain: { count: "products", query: { quantity: { $gt: 50 } } },
verbosity: "executionStats"
}
)

デフォルトでは、 explain"allPlansExecution"の冗長モードで実行されます。 次のexplain コマンドは、queryPlanner executionStatsコマンドのすべての検討済みプランに対してupdate と を返します。

注意

この explain を実行してもデータは変更されませんが、アップデート操作のクエリ述語が実行されます。候補プランの場合、MongoDB ではプラン選択フェーズ中に取得された実行情報が返されます。

db.runCommand(
{
explain: {
update: "products",
updates: [
{
q: { quantity: 1057, category: "apparel" },
u: { $set: { reorder: true } }
}
]
}
}
)

戻る

dbStats