Optimization Tips | Tip #25: Use compound indexes to make multiple queries fast

如果可以,多个查询时可以创建个混合索引.当然这个不是总是可以的,除非你多个查询时使用类似的参数.

试想,你的应用程序运行将进行这些查询:

collection.find({"x" : criteria, "y" : criteria, "z" : criteria})
collection.find({"z" : criteria, "y" : criteria, "w" : criteria})
collection.find({"y" : criteria, "w" : criteria})

正如你看到的,y在每个查询中都会出现,所以这个个非常好的索引候选者,z出现在第一次和第二次,w出现在第二次和第三次,所以任何其中的一个都可以作为索引的候选者.

我们要尽可能多的频繁的命中索引.如果上面的某个查询比其它的更重要或者说使用频率更高,我们索引应该尽量偏袒于它.比如说,试想第一个查询运行查过其它两个1000多次.我们应该这么建立索引:

collection.ensureIndex({"y" : 1, "z" : 1, "x" : 1}) 

这个查询将会尽可能的最大优化,其它两个查询将会使用部分索引进行查询.

如果三个查询运行次数相近,一个好的混合索引应该是

collection.ensureIndex({"y" : 1, "w" : 1, "z" : 1})

这样三个查询就会使用y作为标准索引,第二个和第三个能够使用w作为索引,中间那个查询将会全部命中索引.

你可以调用explain()来查看索引怎么在查询中使用的

collection.find(criteria).explain()


(译者续: 有关Compound index可以参看官网  http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysIndexes )



原版书 <<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 










原文链接: http://blog.csdn.net/crazyjixiang/article/details/6689607

你可能感兴趣的:(Optimization Tips | Tip #25: Use compound indexes to make multiple queries fast)