explain()(查看执行计划)
最后更新:2026-10-09
explain()(查看执行计划)
explain()返回查询的执行计划,语法为`db.users.find({ age: { $gt: 20 } }).explain('executionStats')`。结果包含是否使用索引、扫描文档数、执行耗时等关键指标,是性能调优的核心工具。参数可选'queryPlanner'(默认,只看计划)、'executionStats'(含实际执行统计)、'allPlansExecution'(所有候选计划)。
| 分类 | 游标 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.find(<条件>).explain(<模式>)
⚙️ 参数
| 模式 | 可选。'queryPlanner'、'executionStats'或'allPlansExecution'。 |
|---|
返回值:包含执行计划和统计信息的文档。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// explain:检查age查询是否用了索引
const plan = db.users.find({ age: { $gt: 20 } })
.explain('executionStats')
print('扫描文档数: ' + plan.executionStats.totalDocsExamined)
运行结果:
扫描文档数: 1000
📌 注意事项
- totalDocsExamined远大于返回数说明缺少合适索引
- 查询被优化器重写时winningPlan会显示实际计划
- explain()不返回真实数据,只返回计划信息
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q怎么判断查询有没有用索引?
A看explain()结果里的winningPlan字段,出现IXSCAN表示用了索引,COLLSCAN表示全表扫描。
Qexplain的三种模式有什么区别?
AqueryPlanner只看计划,最快;executionStats还含实际执行统计;allPlansExecution额外包含所有候选计划的执行细节。
Qexplain会执行查询吗?
A会执行(除非用queryPlanner),executionStats模式下的统计来自真实执行,但不会返回文档数据。