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
}
相关推荐
无聊的老谢3 分钟前
Web GIS 最佳实践:Vue 集成 Leaflet/OpenLayers 实现基站海量点位渲染
前端·javascript·vue.js
yingyima6 分钟前
GCP Cloud Scheduler 核心语法与实战示例速查手册
前端
用户57350107252067 分钟前
Elpis 项目阶段性总结 - 基于 vue3 完成领域模型架构建设
前端
假如让我当三天老蒯14 分钟前
为什么 setData 能获取到 prev 参数?(自学用)
前端·react.js
AskHarries25 分钟前
Workspace:文件系统、项目上下文和执行边界
java·服务器·前端
Aphasia31140 分钟前
从内存模型看深浅拷贝
前端·javascript·面试
IT策士1 小时前
第45篇 k8s之实战:将 Web 应用迁移到 Kubernetes(下)
前端·容器·kubernetes
你怎么知道我是队长1 小时前
CRC校验C语言实现-CRC8、CRC16、CRC16的直接计算法、查表法
c语言·前端·javascript
Rain5092 小时前
mini-cc 终端 UI:用 React 写 CLI 是什么体验
前端·人工智能·react.js·ui·架构·前端框架·ai编程
wu8587734572 小时前
向量数据库不是银弹:从枚举漏检到 ReACT 多轮召回的实践路径
前端·数据库·react.js