365Tools
发布时间:2024-03-30 13:30:01
查询分析是衡量数据库和索引设计有效性的一个非常重要的方式。下面我们来介绍一下比较常用的 $explain 和 $hint 查询。
> db.users.createIndex({gender:1, name:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
在 mongo shell 中,您可以通过 $explain 的辅助方法 explain() 来检索查询的相关信息:
> db.users.find({gender:"M"}, {name:1,_id:0}).explain()
上面的 explain() 查询会返回以下分析结果:
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "bianchengbang.users",
"indexFilterSet" : false,
"parsedQuery" : {
"gender" : {
"$eq" : "M"
}
},
"winningPlan" : {
"stage" : "PROJECTION",
"transformBy" : {
"name" : 1,
"_id" : 0
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"gender" : 1,
"name" : 1
},
"indexName" : "gender_1_name_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"gender" : [ ],
"name" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"gender" : [
"[\"M\", \"M\"]"
],
"name" : [
"[MinKey, MaxKey]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "LAPTOP-MDE57TIS",
"port" : 27017,
"version" : "4.0.10",
"gitVersion" : "c389e7f69f637f7a1ac3cc9fae843b635f20b766"
},
"ok" : 1
}
关于上面的运行结果,有以下几点需要说明:
> db.users.find({gender:"M"},{name:1, _id:0}).hint({gender:1, name:1})
{ "name" : "bianchengbang" }
使用 explain() 来分析以上查询:
> db.users.find({gender:"M"},{name:1, _id:0}).hint({gender:1, name:1}).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "bianchengbang.users",
"indexFilterSet" : false,
"parsedQuery" : {
"gender" : {
"$eq" : "M"
}
},
"winningPlan" : {
"stage" : "PROJECTION",
"transformBy" : {
"name" : 1,
"_id" : 0
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"gender" : 1,
"name" : 1
},
"indexName" : "gender_1_name_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"gender" : [ ],
"name" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"gender" : [
"[\"M\", \"M\"]"
],
"name" : [
"[MinKey, MaxKey]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "LAPTOP-MDE57TIS",
"port" : 27017,
"version" : "4.0.10",
"gitVersion" : "c389e7f69f637f7a1ac3cc9fae843b635f20b766"
},
"ok" : 1
}