分享

MongoDB查询过程查看-执行计划函数explain

 A_POST 2019-03-22

explain()是MongoDB的一个重要的查询论断工具,这个函数能够提供大量的与查询相关的信息,该函数会返回查询计划、执行状态、服务器信息,根据这些信息可以有针对性的对性能进行优化。

  1. explain()函数

  2. explain()返回信息

  3. explain()使用示例

1. explain()函数

cursor.explain(verbosity)

查看db.collection.find()的执行查询计划信息时,explain()的使用方法如下:

db.collection.find().explain()

explain()方法的参数如下:

  • verbose:{String},可选参数。指定冗长模式的解释输出,方式指定后会影响explain()的行为及输出信息。

    可选值有:"queryPlanner""executionStats""allPlansExecution",默认为"queryPlanner"

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实例的相关信息:

    • winningPlan.shards-包括每个访问片的queryPlannerserverInfo的文档数组

    • serverInfo.winningPlan-使用的执行计划

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
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多