MongoDB查询分析常用函数explain()

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值