我需要一些建議來創建和排序mongo中的索引。如何在mongodb中構造複合索引
我有一個收集後用5個屬性:
帖子
- 狀態
- 開始日期
- 結束日期
- lowerCaseTitle
- 中將sortOrder
幾乎所有的帖子都會有相同的狀態1,只有少數人會有被拒絕的狀態。我所有的查詢都會過濾狀態,開始和結束日期,並按sortOrder進行排序。我也會有一個查詢在標題上進行正則表達式搜索。
我應該在{status:1,start:1,end:1,sort:1}上設置複合鍵嗎?我把這些字段放在複合索引中的順序是否重要 - 我應該首先將狀態放在複合索引中,因爲它是最廣泛的嗎?對每個房產做一個複合指數而不是單一指數會更好嗎? mongo只對任何給定的查詢使用單個索引嗎?
如果我正在做的正則表達式查詢lowerCaseTitle有索引嗎?
樣本查詢是:
db.posts.find({status: {$gte:0}, start: {$lt: today}, end: {$gt: today}}).sort({sortOrder:1})
db.posts.find({lowerCaseTitle: /japan/, status:{$gte:0}, start: {$lt: today}, end: {$gt: today}}).sort({sortOrder:1})
排序鍵不應總是在用於查詢的最後一個鍵之後。如果提前使用排序鍵,則排序會在修剪之前進行。 [這篇文章](http://architects.dzone.com/articles/cardinal-ins-mongodb-query)說明了這是有用的。 – 2013-06-30 00:21:05
有趣。我會做一些測試來看看實際的真實世界的性能特點。我不得不說,我有點懷疑這是永遠在現實世界情況下的性能改進(讀;大數據集,範圍查詢的高選擇性) – 2013-07-04 09:54:37
@RemonvanVliet關於基數和忽略索引前綴優化,應複合索引鍵按最高到最低基數還是從最低到最高排序?我查閱了涉及複合索引的mongodb文檔,並對這個具體問題做出了回答;儘管我假設從最高到最低。另外:從2.6開始,mongodb支持索引交集的2個索引。 – zamnuts 2015-01-19 21:18:32