explain
定义
explain
的
explain
命令提供了以下命令的执行信息aggregate
、count
、distinct
、find
、findAndModify
、delete
、mapReduce
和update
.提示
在
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 | 文档 | |
详细程度 | 字符串 | 可选。指定运行 可能的模式包括
有关模式的更多信息,请参阅 explain 行为。 |
注释 | 任意 | 可选。用户提供的注释,用于附加到此命令。一旦设置,此注释将出现在以下位置的此命令记录旁边
注释可以是任何有效的 BSON 类型(字符串、整数、对象、数组等)。 如果您指定 |
行为
详细模式
《explain》命令的行为和返回的信息量取决于《verbose》模式。
MongoDB运行查询优化器以选择评估操作的最佳计划。《explain》命令返回评估的《
MongoDB运行查询优化器以选择最佳计划,执行该计划,并返回描述最佳计划执行的统计信息。
对于写操作,《explain》命令返回将执行更新的或删除操作的信息,但不会将这些修改应用到数据库中。
explain
返回评估的《
默认情况下,《explain》命令在《allPlansExecution》详细模式下运行。
MongoDB运行查询优化器以选择最佳计划并执行该计划。在《allPlansExecution》模式下,MongoDB返回描述最佳计划执行的统计信息以及《plan selection》期间捕获的其他候选计划的统计信息。
对于写操作,《explain》命令返回将执行更新的或删除操作的信息,但不会将这些修改应用到数据库中。
explain
返回评估的《
如果查询优化器考虑了多个计划,则executionStats
信息还包括在计划选择阶段捕获的关于获胜和被拒绝候选计划的部分执行信息。
解释和写操作
对于写操作,explain
命令返回将执行的操作信息,但实际上不修改数据库。
稳定API
稳定API V1支持以下Stable API的详细模式为explain
命令
警告
MongoDB不保证explain
命令的任何特定输出格式,即使在使用稳定API的情况下。
限制
您不能在包含$out
阶段的聚合管道
中使用explain
命令/db.collection.explain()
在executionStats
模式或allPlansExecution
模式下。相反,您可以选择
输出
explain
操作可以返回有关
explainVersion
(输出格式版本,例如,“1”)的信息。command
(正在解释的命令的详细信息)。queryShapeHash
(从MongoDB 8.0开始,这是一个包含查询形状散列的十六进制字符串。有关详细信息,请参阅查询形状、查询形状、查询形状散列和explain.queryShapeHash
。)queryPlanner
(查询优化器选择的计划以及拒绝的计划)。executionStats
(获胜计划的执行以及拒绝的计划的执行)。serverInfo
(提供MongoDB实例的信息)。serverParameters
,该代码详细说明了内部参数。
详细模式(即 queryPlanner
、executionStats
、allPlansExecution
)决定了结果是否包含 executionStats
,以及是否 executionStats
包含在 计划选择 过程中捕获的数据。
解释输出受最大 BSON 文档嵌套深度 的限制,嵌套深度为 100 层。超出限制的解释输出将被截断。
有关输出的详细信息,请参阅 解释结果。
示例
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 } } } ] } } )