Mogodb sql执行计划
查询执行计划语句
find()前后都可以加.explain()查询执行计划
aggregate()只能在前面加.explain()
db.chat_message_history.find({name:"111"}).explain();
db.chat_message_history.explain().find({name:"111"});
db.chat_message_history.explain().aggregate([
{
$match: {
"name": "111",
"id": { $in: ["222"] },
"userId": {
$in: [
"fc7b2214cb8941abf81c09b3ec4550f4",
"c8d842883e7c7fc4270a5f27e58b5177",
"ad136f4b54142b4053c2dd284986e198",
"ffe622d6008f6862b60410abbbf7261c",
"a9c67b84c5ca347cf97329c52c471b12",
"1f415daa792ce0dac6274686108fcf6d",
"1e9949b6cbe32d5416dab19855d42694",
"e6a1820811a3e7fca9963698b7758ee1",
"790ea6cec69ae5bf7e820d1ea9af776e",
"c8b05d13684ffabdea7cee2f35b783a3"
]
},
"msgTime": {
$gte: 1750089600000,
$lte: 1757951940000
}
}
},
{
$sort: {
"msgTime": -1,
"seq": -1
}
},
{
$limit: 20000
}
])
执行结果
下面是对 explain 命令返回结果中各个字段的解释:
优化索引重点关注queryPlanner信息
- explainVersion: 指明了使用的 explain 版本。
- queryPlanner: 包含 MongoDB 查询优化器所考虑的各种候选索引和最终选择的索引的信息。
- command: 显示了被执行的原始命令。
- serverInfo: 提供了服务器的一些基本信息,包括版本、主机名等。
- serverParameters: 列出了与查询相关的服务器参数。
- ok: 表示操作是否成功(1表示成功,0表示失败)。
- $clusterTime: 返回集群的时间戳。
- operationTime: 返回操作的时间戳。
queryPlanner 详解
- namespace: 数据库和集合名称。
- indexFilterSet: 是否应用了索引过滤器。
- 索引过滤器允许开发者为特定查询模式(Query Shape)显式指定使用的索引,覆盖优化器的默认选择逻辑。
例如,强制某类查询必须使用复合索引而非单字段索引A。
适用场景:- 优化器自动选择的索引性能不佳时。
- 需要强制测试特定索引的效果(如性能调优阶段)。
- 当值为 true 时,说明优化器根据预定义的索引过滤规则选择了特定索引,跳过了自动评估其他索引的流程。
- 当值为 false 时,优化器会基于查询条件和索引统计信息,自主选择最优执行计划。
- 索引过滤器允许开发者为特定查询模式(Query Shape)显式指定使用的索引,覆盖优化器的默认选择逻辑。
- parsedQuery: 解析后的查询条件。
- winningPlan: 最终被选中的执行计划。
- rejectedPlans: 被拒绝的其他执行计划列表。
- candidateIndexes: 可能用于查询的所有索引列表及其相关信息。
- directions: 索引扫描的方向。
- sortPatternRemoved: 如果排序模式被移除,则为 true;否则为 false。
- coveredIndexScanAllowed: 是否允许覆盖索引扫描。
- multiKeyAware: 是否意识到多键索引。
- planCacheEntry: 计划缓存条目信息(如果存在的话)。
winningPlan 和 rejectedPlans 详解
- stage: 执行阶段类型,例如 COLLSCAN(全表扫描)、IXSCAN(索引扫描)、FETCH(从磁盘获取文档)等。
- inputStage: 子阶段,即当前阶段依赖的前一阶段。
- filter: 过滤条件,用于筛选满足条件的文档。
indexName: 使用的索引名称。- keyPattern: 索引的关键字模式。
- isMultiKey: 是否是多键索引。
- isUnique: 索引是否唯一。
- boundingBoxPredicate: 边界框谓词(仅适用于地理空间索引)。
- collation: 排序规则。
- indexBounds: 索引边界条件。
- nReturned: 返回的文档数量。
- executionTimeMillisEstimate: 预估的执行时间(毫秒)。

浙公网安备 33010602011771号