最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
MongoDB使用explain命令的步骤和代码示例
时间:2026-06-08 08:44:53 编辑:袖梨 来源:一聚教程网
使用 MongoDB 的 explain 命令可以深入了解查询的执行计划,从而帮助你优化和调试查询性能。下面是详细的步骤和代码示例,展示如何使用 explain 命令深入分析查询。

1. 基本使用
最基本的 explain 命令可以提供查询的执行计划。
示例:基本explain使用
db.students.find({ studentId: 12345 }).explain();2. explain() 的模式
explain 命令有三种模式:
- queryPlanner: 返回查询的逻辑计划和索引使用情况。
- executionStats: 返回查询的逻辑计划、索引使用情况以及执行统计信息。
- allPlansExecution: 返回查询的逻辑计划、所有备选计划以及每个计划的执行统计信息。
示例:不同模式的explain
// queryPlanner 模式db.students.find({ studentId: 12345 }).explain("queryPlanner");// executionStats 模式db.students.find({ studentId: 12345 }).explain("executionStats");// allPlansExecution 模式db.students.find({ studentId: 12345 }).explain("allPlansExecution");3. explain() 输出解读
示例输出(executionStats 模式)
{ "queryPlanner": { "plannerVersion": 1, "namespace": "school.students", "indexFilterSet": false, "parsedQuery": { "studentId": { "$eq": 12345 } }, "winningPlan": { "stage": "FETCH", "inputStage": { "stage": "IXSCAN", "keyPattern": { "studentId": 1 }, "indexName": "studentId_1", "direction": "forward", "indexBounds": { "studentId": [ "[12345, 12345]" ] } } }, "rejectedPlans": [] }, "executionStats": { "executionSuccess": true, "nReturned": 1, "executionTimeMillis": 2, "totalKeysExamined": 1, "totalDocsExamined": 1, "executionStages": { "stage": "FETCH", "nReturned": 1, "executionTimeMillisEstimate": 0, "works": 2, "advanced": 1, "needTime": 0, "needYield": 0, "saveState": 0, "restoreState": 0, "isEOF": 1, "invalidates": 0, "docsExamined": 1, "alreadyHasObj": 0, "inputStage": { "stage": "IXSCAN", "nReturned": 1, "executionTimeMillisEstimate": 0, "works": 2, "advanced": 1, "needTime": 0, "needYield": 0, "saveState": 0, "restoreState": 0, "isEOF": 1, "invalidates": 0, "keyPattern": { "studentId": 1 }, "indexName": "studentId_1", "isMultiKey": false, "multiKeyPaths": { "studentId": [] }, "indexBounds": { "studentId": [ "[12345, 12345]" ] }, "keysExamined": 1, "seeks": 1, "dupsTested": 0, "dupsDropped": 0 } } }, "serverInfo": { "host": "localhost", "port": 27017, "version": "4.4.6", "gitVersion": "22c124145fa3bfdaeafb3f6d1b5f3d4e8391fe86" }}关键字段解读
- queryPlanner:
namespace: 查询的命名空间,即数据库和集合的名称。parsedQuery: MongoDB 解析后的查询条件。winningPlan: 查询的执行计划,包括使用的索引和操作步骤。rejectedPlans: 被拒绝的其他执行计划。
- executionStats:
executionSuccess: 查询是否成功。nReturned: 查询返回的文档数量。executionTimeMillis: 查询的执行时间(毫秒)。totalKeysExamined: 扫描的索引键数量。totalDocsExamined: 扫描的文档数量。数字越小越好。executionStages: 查询的执行步骤及其统计信息。
- executionStages:
stage: 执行阶段名称,例如FETCH,IXSCAN。nReturned: 该阶段返回的文档数量。executionTimeMillisEstimate: 该阶段的估计执行时间。keysExamined: 该阶段扫描的索引键数量。docsExamined: 该阶段扫描的文档数量。inputStage: 下一个输入阶段的信息。
4. 示例:复合索引和多条件查询
假设有一个复合索引 { lastName: 1, firstName: 1 },并执行多条件查询。
创建复合索引
db.students.createIndex({ lastName: 1, firstName: 1 });查询及执行计划分析
db.students.find({ lastName: "Smith", firstName: "John" }).explain("executionStats");示例输出及解读
{ "queryPlanner": { "plannerVersion": 1, "namespace": "school.students", "indexFilterSet": false, "parsedQuery": { "lastName": { "$eq": "Smith" }, "firstName": { "$eq": "John" } }, "winningPlan": { "stage": "FETCH", "inputStage": { "stage": "IXSCAN", "keyPattern": { "lastName": 1, "firstName": 1 }, "indexName": "lastName_1_firstName_1", "direction": "forward", "indexBounds": { "lastName": [ "["Smith", "Smith"]" ], "firstName": [ "["John", "John"]" ] } } }, "rejectedPlans": [] }, "executionStats": { "executionSuccess": true, "nReturned": 1, "executionTimeMillis": 1, "totalKeysExamined": 1, "totalDocsExamined": 1, "executionStages": { "stage": "FETCH", "nReturned": 1, "executionTimeMillisEstimate": 0, "works": 2, "advanced": 1, "needTime": 0, "needYield": 0, "saveState": 0, "restoreState": 0, "isEOF": 1, "invalidates": 0, "docsExamined": 1, "alreadyHasObj": 0, "inputStage": { "stage": "IXSCAN", "nReturned": 1, "executionTimeMillisEstimate": 0, "works": 2, "advanced": 1, "needTime": 0, "needYield": 0, "saveState": 0, "restoreState": 0, "isEOF": 1, "invalidates": 0, "keyPattern": { "lastName": 1, "firstName": 1 }, "indexName": "lastName_1_firstName_1", "isMultiKey": false, "multiKeyPaths": { "lastName": [], "firstName": [] }, "indexBounds": { "lastName": [ "["Smith", "Smith"]" ], "firstName": [ "["John", "John"]" ] }, "keysExamined": 1, "seeks": 1, "dupsTested": 0, "dupsDropped": 0 } } }}通过以上示例和解读,您可以深入了解 MongoDB 查询的执行计划,并根据执行计划中的信息优化查询和索引设计。合理使用 explain 命令,可以显著提升查询性能,确保数据库的高效运行。
相关文章
- 快手TV版下载安装 - 2026官方正版客户端 06-12
- 彭博社官网入口 - 2026最新国际财经资讯平台 06-12
- 优质网站推荐平台 - 窝窝网 06-12
- 小马云最新视频合集 - 2026年真实影像回顾 06-12
- B站网页版登录入口 - 2026官方正版在线登录 06-12
- 包子漫画官网入口 - 免费在线观看热门漫画 06-12