本文我们将和大家分享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 拒绝的执行计划
serverinfo mongodb服务器信息
添加不同参数explain()也接收不同的参数,通过设置不同参数我们可以查看更详细的查询计划。
queryplannerqueryplanner是默认参数,添加queryplanner参数的查询结果就是我们上文看到的查询结果,so,这里不再赘述。
executionstatsexecutionstats会返回最佳执行计划的一些统计信息,如下:
{
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一致
allplansexecutionallplansexecution用来获取所有执行计划,结果参数基本与上文相同,这里就不再细说了。
好了,mongodb中的explain()我们就说到这里,小伙伴们有问题欢迎留言讨论。
相关推荐:
mongodb的技巧与注意事项汇总
mongodb固定集合详解
laravel使用mongodb数据库的方法教程