2013-02-11 61 views
0

在mongo中,當創建一個索引時,我試圖弄清楚下面的查詢是否有索引a)category_ids和status,或者b)category_ids,status和name ???如何在WHERE和ORDER查詢中的mongodb中創建索引?

Source.where(category_ids: [1,2,3], status: Status::ACTIVE).order_by(:name) # ((Ruby/Mongoid code)) 

本質上,我試圖找出索引是否應該包括ORDER_BY列?或只有WHERE子句?我在哪裏可以讀到更多關於此的內容?

+2

是的,這個特定查詢的索引對索引中的查詢字段和排序字段都會更有利。這裏有很多好的鏈接:http://docs.mongodb.org/manual/applications/indexes/ http://docs.mongodb.org/manual/faq/indexes/#how-do-you-determine-what-fields -to-index http://jasonwilder.com/blog/2012/02/08/optimizing-mongodb-indexes/ http://stackoverflow.com/questions/10329104/why-does-direction-of-index-matter- in-mongodb http://www.slideshare.net/kbanker/mongo-indexoptimizationprimer來自快速谷歌搜索 – Sammaye 2013-02-11 15:03:16

回答

3

是的,特定查詢上的索引將有利於查詢的速度。然而,這裏有一個警告,索引字段的順序。

我注意到您在category_ids上使用了$in。這個鏈接對於理解使用帶有索引的$in存在的一點複雜性特別有用(事實上通常排序):http://blog.mongolab.com/2012/06/cardinal-ins/

接近尾聲時,它給你一個最優索引順序的indea爲您的查詢類型:

領域的索引中的順序應該是:

First, fields on which you will query for exact values. 
Second, fields on which you will sort. 
Finally, fields on which you will query for a range of values. 

僅供參考一些其他有用的鏈接如下:

這些將幫助你開始優化你的索引,使他們對你的查詢工作。