explain() 是MongoDB的一个重要的查询论断工具,这个函数能够提供大量的与查询相关的信息,该函数会返回查询计划、执行状态、服务器信息,根据这些信息可以有针对性的对性能进行优化。
explain() 函数
explain() 返回信息
explain() 使用示例
1. explain() 函数cursor.explain(verbosity) 查看db.collection.find() 的执行查询计划信息时,explain() 的使用方法如下: db.collection.find().explain() explain() 方法的参数如下:
2. explain() 返回信息explain() 的返回值有:
queryPlanner (查询计划):查询优化选择的计划细节和被拒绝的计划。其可能包括以下值:
winningPlan.stage -表示查询阶段的字符串
winningPlan.inputStage -表示子过程的文档
winningPlan.inputStages -表示子过程的文档数组
queryPlanner.namespace -一个字符串,运行查询的指定命名空间
queryPlanner.indexFilterSet -一个布尔什,表示MongoDB在查询中是否使用索引过滤
queryPlanner.winningPlan -由查询优化选择的计划文档
queryPlanner.rejectedPlans -被查询优化备选并被拒绝的计划数组
executionStats, (执行状态):被选中执行计划和被拒绝执行计划的详细说明:
executionStages.works -指定查询执行阶段执行的“工作单元”的数量
executionStages.advanced -返回的中间结果数
executionStages.needTime -未将中间结果推进到其父级的工作周期数
executionStages.needYield -存储层要求查询系统产生的锁的次数
executionStages.isEOF -指定执行阶段是否已到达流结束
queryPlanner.nReturned -匹配查询条件的文档数
queryPlanner.executionTimeMillis -计划选择和查询执行所需的总时间(毫秒数)
queryPlanner.totalKeysExamined -扫描的索引总数
queryPlanner.totalDocsExamined -扫描的文档总数
queryPlanner.totalDocsExamined -扫描的文档总数
queryPlanner.executionStages -显示执行成功细节的查询阶段树
queryPlanner.allPlansExecution -包含在计划选择阶段期间捕获的部分执行信息,包括选择计划和拒绝计划
serverInfo, (服务器信息):MongoDB实例的相关信息:
3. explain() 使用示例有一个users 集合,现查询其'status' 值为'1'的数据,并查看执行情况: > db.users.find({status:1}).explain()
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 9,
"server" : "localhost:27017",
"filterSet" : false
}
|