05-MogoDB执行计划

执行计划

MongoDB 查询分析可以确保我们建议的索引是否有效,是查询语句性能分析的重要工具

shell 复制代码
#插入1000条数据
for(var i=1;i<1000;i++)db.user.insert({id:100+i,username:'name_'+i,age:10+i})
shell 复制代码
#查看执行计划
> db.user.find({age:{$gt:100},id:{$lt:200}}).explain()
{
	"queryPlanner" : {
		"plannerVersion" : 1,
		"namespace" : "testdb.user",
		"indexFilterSet" : false,
		"parsedQuery" : {
			"$and" : [
				{
					"id" : {
						"$lt" : 200
                     }
				},
				{
        			"age" : {
       					"$gt" : 100
        			}
        		}
        	]
        },
		"winningPlan" : { #最佳执行计划
			"stage" : "FETCH", #查询方式,常见的有COLLSCAN/全表扫描、IXSCAN/索引扫描、FETCH/根据索引去检索文档、SHARD_MERGE/合并分片结果、IDHACK/针对_id进行查询
        	"inputStage" : {
        		"stage" : "IXSCAN",
        		"keyPattern" : {
                    "age" : 1,
                    "id" : -1
        		},
                "indexName" : "age_1_id_-1",
                "isMultiKey" : false,
                "multiKeyPaths" : {
                    "age" : [ ],
                    "id" : [ ]
                },
                "isUnique" : false,
                "isSparse" : false,
                "isPartial" : false,
                "indexVersion" : 2,
                "direction" : "forward",
                "indexBounds" : {
                "age" : [
                    "(100.0, inf.0]"
                    ],
                    "id" : [
                    "(200.0, -inf.0]"
            		]
            	}
            }
        },
		"rejectedPlans" : [ ]
	},
	"serverInfo" : {
        "host" : "c493d5ff750a",
        "port" : 27017,
        "version" : "4.0.3",
		"gitVersion" : "7ea530946fa7880364d88c8d8b6026bbc9ffa48c"
	},
	"ok" : 1
}
shell 复制代码
#测试没有使用索引
> db.user.find({username:'zhangsan'}).explain()
{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "testdb.user",
        "indexFilterSet" : false,
        "parsedQuery" : {
        	"username" : {
        		"$eq" : "zhangsan"
				}
			},
			"winningPlan" : {
            	"stage" : "COLLSCAN", #全表扫描
            	"filter" : {
            		"username" : {
            			"$eq" : "zhangsan"
					}
				},
				"direction" : "forward"
			},
			"rejectedPlans" : [ ]
	},
	"serverInfo" : {
		"host" : "c493d5ff750a",
        "port" : 27017,
        "version" : "4.0.3",
		"gitVersion" : "7ea530946fa7880364d88c8d8b6026bbc9ffa48c"
	},
	"ok" : 1
}
相关推荐
HIT_Weston24 分钟前
44、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 分析(一)
前端·ubuntu·gitlab
华仔啊41 分钟前
Vue3 如何实现图片懒加载?其实一个 Intersection Observer 就搞定了
前端·vue.js
JamesGosling6661 小时前
深入理解内容安全策略(CSP):原理、作用与实践指南
前端·浏览器
不要想太多1 小时前
前端进阶系列之《浏览器渲染原理》
前端
七喜小伙儿1 小时前
第2节:趣谈FreeRTOS--打工人的日常
前端
我叫张小白。2 小时前
Vue3 响应式数据:让数据拥有“生命力“
前端·javascript·vue.js·vue3
laocooon5238578862 小时前
vue3 本文实现了一个Vue3折叠面板组件
开发语言·前端·javascript
IT_陈寒2 小时前
React 18并发渲染实战:5个核心API让你的应用性能飙升50%
前端·人工智能·后端
科普瑞传感仪器2 小时前
从轴孔装配到屏幕贴合:六维力感知的机器人柔性对位应用详解
前端·javascript·数据库·人工智能·机器人·自动化·无人机
n***F8752 小时前
SpringMVC 请求参数接收
前端·javascript·算法