MongoDB索引Index应用之慢查询分析
似乎数据库都提供explain功能,利用其进行MongoDB慢查询实践分析前先准备实践数据:
1、产品表products
products中添加200多万的数据。
2、订单表orders
参考MySQL索引原理之慢查询等优化 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中慢查询优化的过程,MongoDB也是类似的过程:
1、开启内置的查询分析器,记录读写操作效率
db.setProfilingLevel(n,m),n的取值可选0,1,2
0:表示不记录
1:表示记录慢速操作,如果值为1,m必须赋值单位为ms,⽤于定义慢速查询时间的阈值
2:表示记录所有的读写操作
2、查询监控结果
db.system.profile.find().sort({millis:-1}).limit(3)
3、分析慢速查询
executionStats.executionTimeMillis = 796 //该query的整体查询时间。
executionStats.executionStages.executionTimeMillisEstimate = 568 //该查询检索document获得数据的时间。
executionStats.executionStages.inputStage.executionTimeMillisEstimate = 226 //该查询扫描⽂档 index所⽤时间。
这三个值越少越好。
nReturned=totalKeysExamined= totalDocsExamined=99999,分别代表该条查询返回的条⽬、索引扫描条⽬、⽂档扫描条⽬,三者一致。
stage组合:Fetch+IXSCAN,根据索引去检索指定document。
从以上数据看,查询出于理想状态。
如以上数据不太理想,可以考虑应⽤程序设计不合理、不正确的数据模型、硬件配置问题,缺少索引等。
4、解读explain结果确定是否缺少索引
看以上查询执行计划,使用了全表烧苗,没有使用索引,可以添加price的索引优化该查询。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)