查询计划解析

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 查看查询计划、查询计划的执行统计的方法:db.collection.explain()、cursor.explain()、explainexplain输出默认只输出queryPlanner、serverInfo部分,如果需要输出executionStats,则可以指定explain(allPlan...

查看查询计划、查询计划的执行统计的方法:db.collection.explain()、cursor.explain()、explain
explain输出默认只输出queryPlanner、serverInfo部分,如果需要输出executionStats,则可以指定explain(allPlansExecution)或者explain("executionStats")

queryPlanner:执行计划相关描述

    .COLLSCAN for a collection scan
    .IXSCAN for scanning index keys
    .FETCH for retrieving documents
    .SHARD_MERGE for merging results from shards
    .IDHACK 针对_id进行查询
    .SHARDING_FILTER 通过mongos对分片数据进行查询
    .COUNT 利用db.coll.explain().count()之类进行count运算
    .COUNTSCAN count不使用用Index进行count时的stage返回
    .COUNT_SCAN count使用了Index进行count时的stage返回
    .SUBPLA 未使用到索引的$or查询的stage返回
    .TEXT 使用全文索引进行查询时候的stage返回
    .PROJECTION 限定返回字段时候stage的返回
    .AND_SORTED 表示Index Intersection
    .SORT 表示在内存中排序
    .EOF 表示结果不存在

If MongoDB can use an index scan to obtain the requested sort order, the result will not include a SORT stage. Otherwise, if MongoDB cannot use the index to sort, the explain result will include a SORT stage.

样例
db.common_log_new.explain("allPlansExecution").find({ctime:{$lte:1529474045}}).limit(10)
{

    "queryPlanner" : {  --queryPlanner模式下并不会去真正进行query语句查询,而是针对query语句进行执行计划分析并选出winning plan。
            "plannerVersion" : 1,
            "namespace" : "dresslily.common_log_new",
            "indexFilterSet" : false,   --指定mongodb是否应用索引过滤
            "parsedQuery" : {
                    "ctime" : {
                            "$lte" : 1529474045   --具体的查询语句
                    }
            },
            "winningPlan" : {   --查询优化器选择的最优执行计划
                    "stage" : "LIMIT",  --将检索出来的文档做limit处理
                    "limitAmount" : 10,
                    "inputStage" : {   --描述子stage的文档,提供文档或者索引给他的父级stage,该值表示是否父级stage只有一个子节点
                            "stage" : "FETCH",  --通过返回的index位置去检索具体的文档
                            "inputStage" : {
                                    "stage" : "IXSCAN", --索引扫描,这个地方可以判断该查询是通过索引还是全集合扫描数据
                                    "keyPattern" : {   --所扫描的Index内容
                                            "ctime" : 1
                                    },
                                    "indexName" : "idx_ctime",  --索引名称
                                    "isMultiKey" : false,  --是否为多键索引
                                    "isUnique" : false,    --是否为唯一索引
                                    "isSparse" : false,    --是否为稀疏索引
                                    "isPartial" : false,   --是否为部分索引
                                    "indexVersion" : 1,
                                    "direction" : "forward",  --query的查询顺序,如果用了.sort({w:-1})将显示backward。
                                    "indexBounds" : {  --winningplan所扫描的索引范围
                                            "ctime" : [
                                                    "[-inf.0, 1529474045.0]"
                                            ]
                                    }
                            }
                    }
            },
            "rejectedPlans" : [ ]
    },
    "executionStats" : {  --query语句查询的过程
            "executionSuccess" : true,
            "nReturned" : 10,  --查询的返回条数
            "executionTimeMillis" : 53, --整体执行时长
            "totalKeysExamined" : 10,  --索引扫描条目数
            "totalDocsExamined" : 10,  --document扫描条目数,如果索引可以覆盖查询,那么这个地方应该是0,比较好的结果是totalDocsExamined=totalKeysExamined
            "executionStages" : {
                    "stage" : "LIMIT",  --与queryPlanner.winningPlan.stage部分对应,影响totalKeysExamined与totalDocsExamined
                    "nReturned" : 10,
                    "executionTimeMillisEstimate" : 0,
                    "works" : 11,  
                    "advanced" : 10,
                    "needTime" : 0,
                    "needYield" : 0,
                    "saveState" : 0,
                    "restoreState" : 0,
                    "isEOF" : 1,
                    "invalidates" : 0,
                    "limitAmount" : 10,
                    "inputStage" : {
                            "stage" : "FETCH",
                            "nReturned" : 10,
                            "executionTimeMillisEstimate" : 0,
                            "works" : 10,
                            "advanced" : 10,
                            "needTime" : 0,
                            "needYield" : 0,
                            "saveState" : 0,
                            "restoreState" : 0,
                            "isEOF" : 0,
                            "invalidates" : 0,
                            "docsExamined" : 10,
                            "alreadyHasObj" : 0,
                            "inputStage" : {
                                    "stage" : "IXSCAN",
                                    "nReturned" : 10,
                                    "executionTimeMillisEstimate" : 0,
                                    "works" : 10,
                                    "advanced" : 10,
                                    "needTime" : 0,
                                    "needYield" : 0,
                                    "saveState" : 0,
                                    "restoreState" : 0,
                                    "isEOF" : 0,
                                    "invalidates" : 0,
                                    "keyPattern" : {
                                            "ctime" : 1
                                    },
                                    "indexName" : "idx_ctime",
                                    "isMultiKey" : false,
                                    "isUnique" : false,
                                    "isSparse" : false,
                                    "isPartial" : false,
                                    "indexVersion" : 1,
                                    "direction" : "forward",
                                    "indexBounds" : {
                                            "ctime" : [
                                                    "[-inf.0, 1529474045.0]"
                                            ]
                                    },
                                    "keysExamined" : 10,
                                    "dupsTested" : 0,
                                    "dupsDropped" : 0,
                                    "seenInvalidated" : 0
                            }
                    }
            },
            "allPlansExecution" : [ ]
    },
    "serverInfo" : {
            "host" : "dresslilypcmongodb01.globalerow.com",
            "port" : 27017,
            "version" : "3.2.15",
            "gitVersion" : "e11e3c1b9c9ce3f7b4a79493e16f5e4504e01140"
    },
    "ok" : 1

}

相关文章
|
2月前
|
JSON 前端开发 应用服务中间件
Javaweb之SpringBootWeb案例查询部门以及前后端联调的详细解析
Javaweb之SpringBootWeb案例查询部门以及前后端联调的详细解析
29 0
|
2月前
|
域名解析 缓存 网络协议
DNS协议 是什么?说说DNS 完整的查询过程? _
DNS是互联网的域名系统,它像翻译官一样将域名转换成IP地址。域名由点分隔的名字组成,如www.xxx.com,包含三级、二级和顶级域名。查询方式分为递归和迭代,递归是请求者必须得到答案,而迭代则是服务器指引请求者如何获取答案。域名解析过程中,会利用浏览器和操作系统的缓存,如果缓存未命中,本地域名服务器会通过递归或迭代方式向上级服务器查询,最终得到IP地址并返回给浏览器,同时在各级缓存中保存记录。
DNS协议 是什么?说说DNS 完整的查询过程? _
|
2月前
|
域名解析 网络协议 安全
【域名解析DNS专栏】DNS递归查询与迭代查询的区别及影响
【5月更文挑战第24天】DNS的递归查询与迭代查询是域名解析的两种方式。递归查询由客户端发起,DNS服务器负责全程解析,速度快但可能增加服务器负载和安全风险。迭代查询则需客户端参与多次查询,虽慢但分散负载,提高安全性。理解两者差异有助于优化网站访问体验和安全性。
【域名解析DNS专栏】DNS递归查询与迭代查询的区别及影响
|
2月前
|
域名解析 缓存 网络协议
【域名解析DNS专栏】DNS解析过程深度解析:一次完整的域名查询旅程
【5月更文挑战第21天】DNS系统将人类友好的域名(如www.example.com)转化为IP地址,涉及递归和迭代查询。当用户输入域名,浏览器查询本地DNS缓存,未命中则向本地DNS服务器发起请求。本地服务器向根域名服务器查询,根服务器指引到对应顶级域名的权威DNS,权威DNS提供IP地址。Python示例代码展示了这一过程。了解DNS解析有助于理解互联网运作并优化网络资源管理。
【域名解析DNS专栏】DNS解析过程深度解析:一次完整的域名查询旅程
|
28天前
|
网络协议 Linux 开发者
探索Linux下的`dig`命令:DNS查询的利器
`dig`是Linux下强大的DNS查询工具,适用于系统管理员、网络工程师和开发者。它支持查询A、MX、NS、CNAME等记录类型,以及反向DNS。高级功能包括跟踪查询过程、显示额外信息、指定查询服务器和批量查询。学习`dig`能助你更好地理解DNS工作原理和优化网络问题。
|
7天前
|
存储 关系型数据库 MySQL
深入探索MySQL:成本模型解析与查询性能优化
深入探索MySQL:成本模型解析与查询性能优化
|
7天前
|
存储 SQL BI
深入解析实时数仓Doris:Rollup上卷表与查询
深入解析实时数仓Doris:Rollup上卷表与查询
|
2月前
|
域名解析 缓存 监控
【域名解析 DNS 专栏】DNS 查询日志分析:洞察网络行为与优化建议
【5月更文挑战第28天】DNS查询日志分析对于理解和优化网络行为至关重要。通过日志,可洞察用户访问偏好、流量分布,进而进行缓存优化、负载均衡和安全检测。简单Python代码示例展示了如何读取和分析日志。根据分析结果,可针对性设置优化策略,提升网络性能、稳定性和安全性。不断探索新的分析方法,充分挖掘DNS查询日志的价值,以驱动网络持续优化。
|
2月前
|
SQL 关系型数据库 MySQL
[AIGC] MySQL连接查询全面解析
[AIGC] MySQL连接查询全面解析
|
2月前
|
图形学
R语言其他相关函数(各函数解析含实例,可供查询)
R语言其他相关函数(各函数解析含实例,可供查询)
21 0

推荐镜像

更多