`
wsql
  • 浏览: 11780179 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Optimization Tips | Tip #23: Don’t always use an index

 
阅读更多
现在你已经感觉到索引的好处,但是让我提醒你它们不是所有查询都可以有大大的好处,试想,在Tip #22上的例子中,提取几个记录我们返回一个集合90%的文档.如果我们在这种类型的查询上建立索引,然后通过索引树进行加载60G的索引到内存中,然后我们不得不根据索引的指针从集合中加载230GB的数据.我们最终加载230GB+60GB=290GB--- 远远超过了我们不建立索引的大小.
因此,当你有一个你想返回数据总量的一部分时,索引在通常情况下是很有用的.一个好的经验是:,当你想返回一个集合中的约一半的数据时,它们就不那么有用了.
如果你在某个字段上建立一个索引,但是你做了次很大数据集查询那将会是非常低效的,你可以强制MongoDB不要使用索引通过排序通过{"natual":1}. 这个排序意味着 "返回的数据依靠你的磁盘" 这个可以强制使MongoDB不要使用索引:
  1. >db.foo.find().sort({"$natural":1})
如果不是用索引进行查询,MongoDB会使用表来查询,这意味着将通过查询这个集合中的所有文档来寻找结果.

<写速度>
每次一个新增一个纪录,删除或者更新,必须更新受影响的每个索引.试想当你插入一个文档时,对于每个索引的值,MongoDB不得不查询新的文档在索引树的位置然后插入.对于删除,它必须查询树的条目然后从索引树中删除它.对于更新,你必须像插入一样添加索引,删除一样删除条目,不得不做这些如果一个值改动的话,因此,索引会增加相当多的开销.


原版书<<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.csdn.net/crazyjixiang/article/category/858638

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

译者: Crazybaby







分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics