MongoDB 查询分析可以确保我们建议的索引是否有效,是查询语句性能分析的重要工具
explain 操作提供了查询信息,使用索引及查询统计等。有利于我们对索引的优化。
db.collection.explain()简介
支持下列操作返回查询计划
aggregate(), count() ,distinct(),find(),group(), remove(),update() 等
执行计划中几类常见的操作描述
COLLSCAN 全表扫描
IXSCAN 索引扫描
FETCH 根据索引去检索文档
SHARD_MERGE 合并分片结果
接下来我们在 user 集合中创建 一个age 的索引:
使用 db.user.find({age:26}).explain()操作,返回的结果如下:
db.user.find({age:26}).explain()
{
"queryPlanner" : {
"plannerVersion" : 1, //查询计划版本
"namespace" : "demo.user", //被查询对象
"indexFilterSet" : false, //是否使用到了索引来过滤
"parsedQuery" : { //解析查询,即过滤条件是什么
"age" : {
"$eq" : 26 //此处为age=26
}
},
"winningPlan" : { //最佳的执行计划
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"age" : 1
},
"indexName" : "age_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"age" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"age" : [
"[26.0, 26.0]"
]
}
}
},
"rejectedPlans" : [ ] //拒绝的执行计划,此处没有
},
"serverInfo" : { //服务器信息,包括主机名,端口,版本等。
"host" : "DESKTOP-4921JJC",
"port" : 27017,
"version" : "3.4.7",
"gitVersion" : "cf38c1b8a0a8dca4a11737581beafef4fe120bcd"
},
"ok" : 1
}
需要注意的是,大部分资料会给出类似如下信息输出(下面并不是执行db.user.find({age:26}).explain()操作返回的信息):
这是应该MongoDB中的explain()方法在3.2版本之后进行了一些方法和支持的变动
老版本、大部分资料:db.collection.method().explain()
当前的API:db.collection.explain().method()