跳转到主内容
极星编程网:以代码为星,赴技术山海!

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=1winningPlan最佳执行计划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参数,含义如下: MongoDB For Windows v3.5.4 MongoDB For Windows v3.5.4 下载 参数含义executionSuccess是否执行成功nReturned返回的结果数executionTimeMillis执行耗时totalKeysExamined索引扫描次数totalDocsExamined文档扫描次数executionStages这个分类下描述执行的状态stage扫描方式,具体可选值与上文的相同nReturned查询结果数量executionTimeMillisEstimate预估耗时works工作单元数,一个查询会分解成小的工作单元advanced优先返回的结果数docsExamined文档检查数目,与totalDocsExamined一致 allPlansExecution allPlansExecution用来获取所有执行计划,结果参数基本与上文相同,这里就不再细说了。 好了,MongoDB中的explain()我们就说到这里,小伙伴们有问题欢迎留言讨论。 相关推荐: MongoDB的技巧与注意事项汇总 MongoDB固定集合详解 laravel使用mongodb数据库的方法教程

相关文章