2013-10-23 36 views
0

我的文檔的集合,這是非常非常大(動輒上萬元的文檔)使用索引,以加快從MongoDB的數據庫中讀取

每個文檔是在YYYY這樣

  • 日期/ MM/DD格式
  • TYPE1
  • TYPE2

有〜50個不同的名稱,〜60種不同的類型1,〜20種不同類型2

我需要從這個數據庫中讀取,它通常有兩種情況:

  1. 一套獨特(名,TYPE1,TYPE2),但所有日期
  2. 爲所有類型1日期數
  3. 列表項

柯倫我正在閱讀,沒有任何索引,它非常慢!比有幾個平坦的sql錶慢得多......

我該如何使用索引來加速這個數據庫?

感謝

+0

那麼,創建幾個索引來支持您的查詢。我不明白問題所在。 –

回答

1

日期YYYY/MM/DD格式

有MongoDB的日期時間格式。用它。它使用的內存少於字符串,並且不需要額外的約定。從格式排序等同於0001-01-01到9999-12-31之間日期的順序排列,您的格式是理智的,但內置數據類型絕對適用於範圍查詢。

有〜50個不同的名稱,〜60種不同的類型1,〜20種不同類型2

你的鑰匙已經非常低的選擇性,所以個別指標可能是毫無意義的

我需要從這個數據庫讀取,通常是:

  • a (name,type1,type2),但所有日期均爲

{name, type1, type2}使用複合索引。如果您還需要按時間順序排序,則可能需要添加date進行排序或使用像ObjectId這樣的單一主鍵並依賴於自然排序。

db.collection.ensureIndex({'name' : 1, 'type1' : 1, 'type2' : 1, 'date' : 1}); 
  • 所有type1

什麼是 '幾日' 幾日?我假設你的意思是「給定日期範圍內的所有日期」?使用date的索引。 date自然應該有更好的選擇性,所以個人密鑰是有意義的。

db.collection.ensureIndex({'date' : 1}); 
  • 列表項

列表中的所有項目?任何訂購?你需要更具體的東西。請記住skip/take是昂貴的。

相關問題