2013-03-27 48 views
0

我們有兩種類型的大量查詢。一個查找涉及5個屬性的文檔:日期(lte),存儲在數組中的值,存儲在第二個數組中的值,一個整數(gte)和一個浮點數(gte)。使用Mongo:我們是否應該爲每種類型的大量查詢創建一個索引?

第二個包含這五個屬性加兩個以上。

我們應該創建兩個複合索引,每個查詢一個?假設每個屬性都具有較高的基數。

如果我們這樣做,因爲每個查詢都涉及多個數組,因爲Mongo的限制,我們似乎沒有創建索引。在這種情況下,人們如何構建他們的Mongo數據庫?

我們正在使用MongoMapper。

謝謝!

回答

1

在查詢中的第一個範圍之後查詢的索引其他索引字段的值顯着下降。

從概念上講,我覺得最好考慮索引中的附加字段,從查詢中修剪更小的子樹。第一個範圍剔除一個大分支,第二個範圍更小,第三個更小,等等。我的一般經驗法則只是索引中查詢的第一個範圍是有價值的。

該規則的注意事項是,索引中的附加字段對幫助排序返回的結果可能很有用。

對於第一個查詢,我會在兩個數組值上創建一個索引,然後哪個範圍將排除大多數文檔。日期字段不太可能提供高度排除,除非您可以關閉範圍(lte和gte)。不知道域名,整數和浮點數很難分辨出來。

如果第二個查詢的兩個附加屬性也使用查詢中的範圍,並且沒有明顯更高的排除值,那麼我只需要使用一個索引。

Rob。

相關問題