您好,欢迎访问一九零五行业门户网

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 拒绝的执行计划
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数据库的方法教程
其它类似信息

推荐信息