我需要通過兩個字段(唯一索引)來索引集合,比如字段1和字段2。是什麼在性能方面更好的方法:MongoDB:兩字段索引與文檔字段索引
創建一個常規的兩列索引
- 或 -
結合這兩個領域在一個單一的文件場{字段1:值,字段2: value2}並索引該字段?
注意:我會一直查詢這兩個字段在一起。
我需要通過兩個字段(唯一索引)來索引集合,比如字段1和字段2。是什麼在性能方面更好的方法:MongoDB:兩字段索引與文檔字段索引
創建一個常規的兩列索引
- 或 -
結合這兩個領域在一個單一的文件場{字段1:值,字段2: value2}並索引該字段?
注意:我會一直查詢這兩個字段在一起。
您可以將這些列分開並創建一個索引,以便在查詢兩個字段時提高性能。
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
有可能是一個可能的性能提升,但懷疑的非常多。使用測試數據庫,創建測試數據並對某些測試進行基準測試以找出結果。我們很樂意聽到您的結果。
我會在兩個字段上創建一個複合索引。這將佔用較少的磁盤空間,因爲您不需要存儲額外的組合字段,併爲第一個字段提供額外索引的獎勵,即超過{ a:1, b:1 }
的索引也是{ a:1 }
以上的索引。
那麼,無論我將這兩個字段一起存儲還是存儲在不同的字段中,都將消耗相同的空間。另外,我會一直查詢這兩個字段,因此您列出的第二個好處也不適用於此。我很好奇的是查詢性能。有任何想法嗎? – Andrey 2011-05-19 05:53:44
如果合併字段,它將使用略少的空間,因爲您不需要同時存儲兩個字段名稱。在查詢性能方面,我不認爲會有太大的差異,最好的辦法就是試試看,MongoDB有一些很好的內置分析功能:http://www.mongodb.org/display/DOCS /數據庫+探查 – 2011-05-19 09:45:01