2011-05-18 114 views
6

我需要通過兩個字段(唯一索引)來索引集合,比如字段1和字段2。是什麼在性能方面更好的方法:MongoDB:兩字段索引與文檔字段索引

  1. 創建一個常規的兩列索引

    - 或 -

  2. 結合這兩個領域在一個單一的文件場{字段1:值,字段2: value2}並索引該字段?

注意:我會一直查詢這兩個字段在一起。

回答

3

您可以將這些列分開並創建一個索引,以便在查詢兩個字段時提高性能。

db.things.ensureIndex({field1:1, field2:1}); 

http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysIndexes

具有列在同一列中沒有提供的性能提升,因爲你必須索引他們以同樣的方式:

db.things.ensureIndex({fields.field1:1, fields.field2:1}); 

http://www.mongodb.org/display/DOCS/Indexes#Indexes-EmbeddedKeys

或者你可以索引整個文件

db.things.ensureIndex({fields: 1}); 

http://www.mongodb.org/display/DOCS/Indexes#Indexes-DocumentsasKeys

有可能是一個可能的性能提升,但懷疑的非常多。使用測試數據庫,創建測試數據並對某些測試進行基準測試以找出結果。我們很樂意聽到您的結果。

1

我會在兩個字段上創建一個複合索引。這將佔用較少的磁盤空間,因爲您不需要存儲額外的組合字段,併爲第一個字段提供額外索引的獎勵,即超過{ a:1, b:1 }的索引也是{ a:1 }以上的索引。

+0

那麼,無論我將這兩個字段一起存儲還是存儲在不同的字段中,都將消耗相同的空間。另外,我會一直查詢這兩個字段,因此您列出的第二個好處也不適用於此。我很好奇的是查詢性能。有任何想法嗎? – Andrey 2011-05-19 05:53:44

+0

如果合併字段,它將使用略少的空間,因爲您不需要同時存儲兩個字段名稱。在查詢性能方面,我不認爲會有太大的差異,最好的辦法就是試試看,MongoDB有一些很好的內置分析功能:http://www.mongodb.org/display/DOCS /數據庫+探查 – 2011-05-19 09:45:01