MongoDB实战-MongoDB的查询优化器与hint()

本文深入探讨了MongoDB的查询优化器如何选择最佳索引以提高查询效率。通过示例展示了避免scanAndOrder、满足查询条件的索引选择原则。讨论了查询优化器在没有理想索引时的试探策略,并通过explain()函数分析了强制使用特定索引的影响。此外,还介绍了查询计划的缓存和过期机制。
摘要由CSDN通过智能技术生成

    查询优化器是MongoDB的一部分,如果存在可用的索引,它会为给定查询选择一个最高效的索引。在为查询选择理性的索引时,优化查询器使用了一套相对简单的规则:

(1) 避免scanAndOrder,如果查询中包含排序,尝试使用索引进行排序;

(2) 通过有效的索引约束来满足所有字段--尝试对查询选择器里的字段使用索引

(3) 如果查询包含范围查找或者排序,那么对于选择的索引,其中最后用到的键需能满足该范围查找或者排序。

     如果某个索引能满足以上所有这些条件,那么它会被视为最佳索引并予以使用。要是有多个最佳索引,则任意选择一个。可以遵循这条经验:如果能为查询构建最优索引,查询优化器的工作能更轻松些。

    下面有一个查询,它完全满足索引(和查询优化器)。回顾股票数据集,假设要执行如下查询,获取所有大于200的谷歌收盘价:

db.stock.find({stock_symbol:"GOOG",close:{$gt:200}})
     该查询的最优索引同时包含这两个键,但是其中把close键放在最后以便执行范围查询。

db.stock.ensureIndex({stock_symbol:1,close:1})
     如果执行查询,可以看到这两个键都被用到了,索引边界也与预想的一样:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值