文档菜单
文档首页
/
MongoDB 手册
/ / /

explain

本页面内容

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 输出
  • 示例
explain

explain 命令提供了以下命令的执行信息aggregatecountdistinctfindfindAndModifydeletemapReduceupdate.

提示

mongosh 中,此命令也可以通过 db.collection.explain()cursor.explain() 辅助方法运行。.

辅助方法对 mongosh 用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要方便性或需要额外返回字段的情况下,请使用数据库命令。

注意

使用 explain 会忽略所有现有的计划缓存条目,并阻止 MongoDB 查询规划器创建新的计划缓存条目。

此命令在以下环境中托管的部署中可用

  • MongoDB Atlas:云中 MongoDB 部署的全托管服务

注意

此命令在所有 MongoDB Atlas 集群中都受支持。有关 Atlas 对所有命令的支持信息,请参阅不受支持的命令。

该命令具有以下语法

db.runCommand(
{
explain: <command>,
verbosity: <string>,
comment: <any>
}
)

该命令包含以下字段

字段
类型
描述
explain
文档
指定要返回执行信息的命令的文档。有关特定命令文档的详细信息,请参阅 aggregatecountdistinctfindfindAndModifydeletemapReduceupdate
详细程度
字符串

可选。指定运行 explain 的模式的字符串。模式会影响 explain 的行为并确定返回的信息量。

可能的模式包括

  • "queryPlanner"

  • "executionStats"

  • "allPlansExecution"(默认值)

有关模式的更多信息,请参阅 explain 行为。

注释
任意

可选。用户提供的注释,用于附加到此命令。一旦设置,此注释将出现在以下位置的此命令记录旁边

注释可以是任何有效的 BSON 类型(字符串、整数、对象、数组等)。

如果您指定 explain 而没有指定 comment,则它将继承 explain 中指定的命令的任何 comment

《explain》命令的行为和返回的信息量取决于《verbose》模式。

MongoDB运行查询优化器以选择评估操作的最佳计划。《explain》命令返回评估的《》的《queryPlanner》信息。

MongoDB运行查询优化器以选择最佳计划,执行该计划,并返回描述最佳计划执行的统计信息。

对于写操作,《explain》命令返回将执行更新的或删除操作的信息,但不会将这些修改应用到数据库中。

explain返回评估的《》的《queryPlanner》和《executionStats》信息。但是,《executionStats》不提供被拒绝计划的查询执行信息。

默认情况下,《explain》命令在《allPlansExecution》详细模式下运行。

MongoDB运行查询优化器以选择最佳计划并执行该计划。在《allPlansExecution》模式下,MongoDB返回描述最佳计划执行的统计信息以及《plan selection》期间捕获的其他候选计划的统计信息。

对于写操作,《explain》命令返回将执行更新的或删除操作的信息,但不会将这些修改应用到数据库中。

explain返回评估的《》的《queryPlanner》和《executionStats》信息。《executionStats》包括《winning plan》的《completed》查询执行信息。

如果查询优化器考虑了多个计划,则executionStats信息还包括在计划选择阶段捕获的关于获胜和被拒绝候选计划的部分执行信息。

对于写操作,explain命令返回将执行的操作信息,但实际上不修改数据库。

稳定API V1支持以下Stable API的详细模式为explain命令

警告

MongoDB不保证explain命令的任何特定输出格式,即使在使用稳定API的情况下。

您不能在包含$out阶段的聚合管道中使用explain命令/db.collection.explain()executionStats模式或allPlansExecution模式下。相反,您可以选择

  • queryPlanner模式下运行explain,或者

  • executionStats模式或allPlansExecution模式下运行explain,但不包含$out阶段,以返回$out阶段之前的信息。

explain操作可以返回有关

  • explainVersion(输出格式版本,例如,“1”)的信息。

  • command(正在解释的命令的详细信息)。

  • queryShapeHash(从MongoDB 8.0开始,这是一个包含查询形状散列的十六进制字符串。有关详细信息,请参阅查询形状查询形状查询形状散列explain.queryShapeHash。)

  • queryPlanner(查询优化器选择的计划以及拒绝的计划)。

  • executionStats(获胜计划的执行以及拒绝的计划的执行)。

  • serverInfo(提供MongoDB实例的信息)。

  • serverParameters,该代码详细说明了内部参数。

详细模式(即 queryPlannerexecutionStatsallPlansExecution)决定了结果是否包含 executionStats,以及是否 executionStats 包含在 计划选择 过程中捕获的数据。

解释输出受最大 BSON 文档嵌套深度 的限制,嵌套深度为 100 层。超出限制的解释输出将被截断。

有关输出的详细信息,请参阅 解释结果

以下 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命令返回queryPlannerexecutionStats,这些是针对update命令的所有考虑计划。

注意

此explain的执行不会修改数据,但运行更新操作查询谓词。对于候选计划,MongoDB返回在计划选择阶段捕获的执行信息。

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

返回

dbStats