博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB查看执行计划
阅读量:6761 次
发布时间:2019-06-26

本文共 3598 字,大约阅读时间需要 11 分钟。

一、概述

MongoDB中的explain()函数可以帮助我们查看查询相关的信息,查询分析可以确保我们创建的索引是否有效,是查询语句性能分析的重要工具。

二、explain()基本用法

explain()的用法是必须放在最后面,语法如下:

db.collecton.find({x:1}).explain()

explain()常用是直接跟在find()函数后面,表示查看find()函数的执行计划,举例:

MongoDB Enterprise mongos> db.emp.find({"id":{$lt:1000}}).explain(){    "queryPlanner" : {                    serverInfo" : {                        "host" : "mongotest1",                        "port" : 27021,                        "version" : "3.2.8",                        "gitVersion" : "ed70e33130c977bda0024c125b56d159573dbaf0"                    },                    "plannerVersion" : 1,                    "namespace" : "testdb.emp",                    "indexFilterSet" : false,                    "parsedQuery" : {                        "id" : {                            "$lt" : 1000                        }                    },                       winningPlan" : {                        "stage" : "FETCH",                        "inputStage" : {                            "stage" : "SHARDING_FILTER",                            "inputStage" : {                                "stage" : "IXSCAN",                                "keyPattern" : {                                    "id" : 1                                },                                "indexName" : "id_1",                                "direction" : "forward",                            },                    "rejectedPlans" : [ ]   },   "ok" : 1}

参数说明:

clipboard.png

以上我们看到的是explain()默认参数的情况,其实MongoDB 3.0之后,explain的返回与使用方法与之前版本有了很大的变化,

3.0+版本的explain有三种模式,分别是:queryPlanner、executionStats、allPlansExecution。常用的是queryPlanner和executionStats模式

那我们再来看看executionStats这种模式

MongoDB Enterprise mongos> db.emp.find({"id":{$lt:1000}}).explain("executionStats"){    "queryPlanner" : {        "mongosPlannerVersion" : 1,        "winningPlan" : {            "stage" : "SHARD_MERGE",                  },                  "rejectedPlans" : [ ]    },   "executionStats" : {        "nReturned" : 999,        "executionTimeMillis" : 35,        "totalKeysExamined" : 999,        "totalDocsExamined" : 999,        "executionStages" : {            "stage" : "SHARD_MERGE",            "nReturned" : 999,            "executionTimeMillis" : 35,            "totalKeysExamined" : 999,            "totalDocsExamined" : 999,            "totalChildMillis" : NumberLong(33),            "shards" : [                {                    "shardName" : "shard1",                    "executionSuccess" : true,                    "executionStages" : {                        "stage" : "FETCH",                        "nReturned" : 980,                        "executionTimeMillisEstimate" : 30,                        "works" : 981,                        "advanced" : 980,                        "needTime" : 0,                        "needYield" : 0,                        "saveState" : 7,                        "restoreState" : 7,                        "isEOF" : 1,                        "invalidates" : 0,                        "docsExamined" : 980,                        "alreadyHasObj" : 0    },    "ok" : 1}

executionStats的参数说明:

clipboard.png

在此看来,executionStats这种模式比默认的queryPlanner给出来个更多的可参考的信息,

另外一种模式allPlansExecution是用来获取所有执行计划,参数基本与以上的相同,这里就不再详细说明。

三、总结

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

queryPlanner:查询计划的选择器,首先进行查询分析,最终选择一个winningPlan,是explain返回的默认模式

executionStats:为执行统计模式,返回winningPlan的统计结果

allPlansExecution:为返回所有执行计划的统计,包括rejectedPlan

所以:我们在查询优化的时候,只需要关注queryPlanner, executionStats即可,因为queryPlanner为我们选择出了winningPlan, 而executionStats为我们统计了winningPlan的所有关键数据。

整体来说,通过explain()查看执行计划,分析查询性能情况,可以帮助我们更好的分析和优化,必要的时候可以创建索引,提升查询性能。

转载地址:http://ilbeo.baihongyu.com/

你可能感兴趣的文章
项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框
查看>>
迁移学习(训练数据少的可怜时的办法)
查看>>
Codeforces 798A - Mike and palindrome
查看>>
Chapter 6、字符串(二)(1st,Mar.)
查看>>
4-3 求链式表的表长 (10分)
查看>>
[BZOJ 1491][NOI2007]社交网络(Floyd)
查看>>
# 学号 2017-2018-20172309 《程序设计与数据结构》实验1报告
查看>>
OrderOnline——数据库设计(已更新)
查看>>
(四)虚拟存储管理器的页面调度
查看>>
玩转Windows CPU占用时间 ——编程之美 读书笔记1.1
查看>>
苹果官方的图标大小的调整
查看>>
Maven整理
查看>>
观《构建之法》有感
查看>>
maven环境快速搭建(转)
查看>>
Cacti监控mysql数据库服务器实现过程
查看>>
Python高级编程–正则表达式(习题)
查看>>
HDU 5742 It's All In The Mind
查看>>
ubuntu和Windows 下的GIF动图工具
查看>>
percona-toolkit 工具介绍
查看>>
Visual Studio2012使用技巧
查看>>