Optimization Tips | Tip #24: Create indexs that cover your queries

本博文深入探讨了MongoDB中如何利用索引进行高效查询优化,包括覆盖索引查询、避免不必要的文档加载及全索引查询策略。通过实例展示了如何仅查询指定域并返回索引字段,从而提高查询性能。

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

如果我们只想返回一个集合中的某些域(类似关系型数据库中的字段),可以包含建立索引的域,MongoDB可以做一些覆盖索引的查询,这永远没有 只是返回索引的数据到客户端.比如:试想我们有这样的索引集:

  1. >db.foo.ensureIndex({"x":1,"y":1,"z":1})

然后,如果我们只查询有索引的域然后只要求返回索引的字段,对于MongoDB载入所有文档是没有理由的.

  1. >db.foo.find({"x":criteria,"y":criteria},
  2. ...{"x":1,"y":1,"z":1,"_id":0})

现在,这个查询只涉及有索引的域.

注意下,查询中包含了_id:0 ,在默认情况下这个_id总是会被返回,但这个不是我们索引的一部分.MongoDB不得不在文档中取到_id.从返回的域中删除它意味着MongoDB只根据之间建索引来返回值.

如果一些查询只返回极少的域的话,考虑下在这些域上都建立索引,这样你可以进行全索引来查询.即使它们不会被查询到,比如,z在上面中没有被查询到,但是它被作为域来返回了(译者解释:也就是说这个z是在可以返回的列中,至于你返不返回是没关系的).



原版书<<50 Tips and Tricks for MongoDB Developers>> 地址:http://oreilly.com/catalog/0636920019893

皮皮书屋下载地址http://www.ppurl.com/2011/05/50-tips-and-tricks-for-mongodb-developers.html

本书的所有翻译地址:http://blog.youkuaiyun.com/crazyjixiang/article/category/858638

翻译目的:MongoDB资料国内很少,书就更不必说了,借助对MongoDB的理解为大家做点贡献,如果有翻译有误的地方请指正,不能误入子弟,谢谢!

译者:Crazybaby



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值