mongodb -- 查询优化

本文介绍如何使用MongoDB内置查询分析器记录和分析慢速查询,通过开启不同级别的监控,利用system.profile集合查看监控数据,并使用explain函数深入分析查询执行计划。文章还提供了优化查询性能的技巧,包括合理建立索引,确保每个查询都使用索引以减少文档检查数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步 找出慢速查询

1. 开启内置的查询分析器,记录读写操作效率:
   db.setProfilingLevel(n,{m}),n的取值可选0,1,2;
     1) 0是默认值表示不记录;
     2) 1表示记录慢速操作,如果值为1,m必须赋值单位为ms,用于定义慢速查询时间的阈值;
     3) 2表示记录所有的读写操作;
 例如:db.setProfilingLevel(1,300)

2. 查询监控结果
 监控结果保存在一个特殊的盖子集合system.profile里,这个集合分配了128kb的空间,要确保监控分析数据不会消耗太多的系统性资源;盖子集合维护了自然的插入顺序,可以使用$natural操作符进行排序,如:db.system.profile.find().sort({'$natural':-1}).limit(5)

 

第二步 分析慢速查询

 找出慢速查询的原因比较棘手,原因可能有多个:应用程序设计不合理、不正确的数据模型、硬件配置问题,缺少索引等;接下来对于缺少索引的情况进行分析:

使用explain分析慢速查询
 例如:db.orders.find({'price':{'$lt':2000}}).explain('executionStats')
 explain的入参可选值为:
   1) "queryPlanner" 是默认值,表示仅仅展示执行计划信息;
   2) "executionStats" 表示展示执行计划信息同时展示被选中的执行计划的执行情况信息;
   3) "allPlansExecution" 表示展示执行计划信息,并展示被选中的执行计划的执行情况信息,还展示备选的执行计划的执行情况信息; 

 

第三步 解读explain结果 

 queryPlanner(执行计划描述)
 winningPlan(被选中的执行计划)
 stage(可选项:COLLSCAN 没有走索引;IXSCAN使用了索引)
 rejectedPlans(候选的执行计划)
 executionStats(执行情况描述)
 nReturned (返回的文档个数)
 executionTimeMillis(执行时间ms)
 totalKeysExamined (检查的索引键值个数)
 totalDocsExamined (检查的文档个数)

 


优化目标 Tips:
1. 根据需求建立索引
2. 每个查询都要使用索引以提高查询效率, winningPlan. stage 必须为IXSCAN ;
3. 追求totalDocsExamined = nReturned

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值