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

来源:互联网 发布:安全的聊天软件 编辑:程序博客网 时间:2024/06/14 10:14

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()