文档数据库服务开发规范 执行计划查看 在文档数据库服务中,可以使用explain()方法来查看查询执行计划,了解查询语句的性能和索引使用情况。执行explain()方法后,文档数据库服务会返回一个文档,其中包含了查询执行的详细信息。 以下是在文档数据库服务中查看执行计划的步骤: 1. 执行查询语句:首先需要执行要查看执行计划的查询语句,例如: db.collection.find({field: "value"}) 2. 执行explain()方法:在查询语句之后加上explain()方法,例如: db.collection.find({field: "value"}).explain() 3. 查看执行计划:执行explain()方法后,文档数据库服务会返回一个文档,其中包含了查询执行的详细信息。可以查看文档中的queryPlanner字段、executionStats字段和serverInfo字段,了解查询的执行计划、查询的性能和索引使用情况等信息。例如: { "queryPlanner" : {...}, "executionStats" : {...}, "serverInfo" : {...} } 在执行计划文档中,常见的字段和属性包括: queryPlanner: 查询计划器,表示文档数据库服务是如何执行查询的。 executionStats: 执行统计,表示查询的执行情况和性能。 winningPlan: 最优查询计划,表示文档数据库服务选择的最优查询计划。 rejectedPlans: 拒绝的查询计划,表示文档数据库服务拒绝的查询计划。 totalKeysExamined: 索引扫描的次数,表示查询过程中扫描的索引数量。 totalDocsExamined: 文档扫描的次数,表示查询过程中扫描的文档数量。 executionTimeMillis: 查询的执行时间,表示查询完成所需的时间。 执行计划解析: 看执行时间:executionStats.executionStages.executionTimeMillisEstimate和executionStats.executionStages.inputStage. executionTimeMillisEstimate时间越短越好。 executionStats.executionTimeMillis表示执行计划选择和执行的所有时间。 executionStats.executionStages.executionTimeMillisEstimate表示最优执行计划的执行完成时间。 executionStats.executionStages.inputStage. executionTimeMillisEstimate表示最优执行计划下的子阶段执行完成时间。 看扫描条数:三个条目数相同为最佳。 executionStats. nReturned表示匹配查询条件的文档数。 executionStats .totalKeysExamined表示索引扫描条目数。 executionStats .totalDocsExamined表示文档扫描条目数。 看Stage状态,性能较好的Stage状态组合如下。 Fetch+IDHACK Fetch+ixscan Limit+(Fetch+ixscan) PROJECTION+ixscan 状态说明: 状态名称 状态名称 COLLSCAN 全表扫描 SORT 内存中进行排序 IDHACK 根据id进行查询 TEXT 全文索引 FETCH 索引扫描 LIMIT 使用Limit限制返回数 SUBPLA 未用索引的$or查询阶段 PROJECTION 未用索引的$or查询阶段 COUNTSCAN 使用索引计数