Php7 mongodb explain,MongoDB查看执行计划

本文我们将和大家分享MongoDB查看执行计划知识,希望可以帮助到大家。MongoDB中的explain()函数可以帮助我们查看查询相关的信息,这有助于我们快速查找到搜索瓶颈进而解决它,本文我们就来看看explain()的一些用法及其查询结果的含义。

1.Linux上安装MongoDB

2.MongoDB基本操作

3.MongoDB数据类型

4.MongoDB文档更新操作

5.MongoDB文档查询操作(一)

6.MongoDB文档查询操作(二)

7.MongoDB文档查询操作(三)

整体来说,explain()的用法和sort()、limit()用法差不多,不同的是explain()必须放在最后面。

基本用法

先来看一个基本用法:db.sang_collect.find({x:1}).explain()

直接跟在find()函数后面,表示查看find()函数的执行计划,结果如下:{

"queryPlanner" : {

"plannerVersion" : 1,

"namespace" : "sang.sang_collect",

"indexFilterSet" : false,

"parsedQuery" : {

"x" : {

"$eq" : 1.0

}

},

"winningPlan" : {

"stage" : "COLLSCAN",

"filter" : {

"x" : {

"$eq" : 1.0

}

},

"direction" : "forward"

},

"rejectedPlans" : []

},

"serverInfo" : {

"host" : "localhost.localdomain",

"port" : 27017,

"version" : "3.4.9",

"gitVersion" : "876ebee8c7dd0e2d992f36a848ff4dc50ee6603e"

},

"ok" : 1.0

}

返回结果包含两大块信息,一个是queryPlanner,即查询计划,还有一个是serverInfo,即MongoDB服务的一些信息。那么这里涉及到的参数比较多,我们来一一看一下:参数含义plannerVersion查询计划版本

namespace要查询的集合

indexFilterSet是否使用索引

parsedQuery查询条件,此处为x=1

winningPlan最佳执行计划

stage查询方式,常见的有COLLSCAN/全表扫描、IXSCAN/索引扫描、FETCH/根据索引去检索文档、SHARD_MERGE/合并分片结果、IDHACK/针对_id进行查询

filter过滤条件

direction搜索方向

rejectedPlans拒绝的执行计划

serverInfoMongoDB服务器信息

添加不同参数

explain()也接收不同的参数,通过设置不同参数我们可以查看更详细的查询计划。

queryPlanner

queryPlanner是默认参数,添加queryPlanner参数的查询结果就是我们上文看到的查询结果,so,这里不再赘述。

executionStats

executionStats会返回最佳执行计划的一些统计信息,如下:{

"queryPlanner" : {

"plannerVersion" : 1,

"namespace" : "sang.sang_collect",

"indexFilterSet" : false,

"parsedQuery" : {},

"winningPlan" : {

"stage" : "COLLSCAN",

"direction" : "forward"

},

"rejectedPlans" : []

},

"executionStats" : {

"executionSuccess" : true,

"nReturned" : 10000,

"executionTimeMillis" : 4,

"totalKeysExamined" : 0,

"totalDocsExamined" : 10000,

"executionStages" : {

"stage" : "COLLSCAN",

"nReturned" : 10000,

"executionTimeMillisEstimate" : 0,

"works" : 10002,

"advanced" : 10000,

"needTime" : 1,

"needYield" : 0,

"saveState" : 78,

"restoreState" : 78,

"isEOF" : 1,

"invalidates" : 0,

"direction" : "forward",

"docsExamined" : 10000

}

},

"serverInfo" : {

"host" : "localhost.localdomain",

"port" : 27017,

"version" : "3.4.9",

"gitVersion" : "876ebee8c7dd0e2d992f36a848ff4dc50ee6603e"

},

"ok" : 1.0

}

这里除了我们上文介绍到的一些参数之外,还多了executionStats参数,含义如下:参数含义executionSuccess是否执行成功

nReturned返回的结果数

executionTimeMillis执行耗时

totalKeysExamined索引扫描次数

totalDocsExamined文档扫描次数

executionStages这个分类下描述执行的状态

stage扫描方式,具体可选值与上文的相同

nReturned查询结果数量

executionTimeMillisEstimate预估耗时

works工作单元数,一个查询会分解成小的工作单元

advanced优先返回的结果数

docsExamined文档检查数目,与totalDocsExamined一致

allPlansExecution

allPlansExecution用来获取所有执行计划,结果参数基本与上文相同,这里就不再细说了。

好了,MongoDB中的explain()我们就说到这里,小伙伴们有问题欢迎留言讨论。

相关推荐:

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值