MongoDB:两字段索引与文档字段索引

问题描述:

我需要通过两个字段(唯一索引)来索引集合,比如字段1和字段2。是什么在性能方面更好的方法:MongoDB:两字段索引与文档字段索引

  1. 创建一个常规的两列索引

    - 或 -

  2. 结合这两个领域在一个单一的文件场{字段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 }以上的索引。

+0

那么,无论我将这两个字段一起存储还是存储在不同的字段中,都将消耗相同的空间。另外,我会一直查询这两个字段,因此您列出的第二个好处也不适用于此。我很好奇的是查询性能。有任何想法吗? – Andrey 2011-05-19 05:53:44

+0

如果合并字段,它将使用略少的空间,因为您不需要同时存储两个字段名称。在查询性能方面,我不认为会有太大的差异,最好的办法就是试试看,MongoDB有一些很好的内置分析功能:http://www.mongodb.org/display/DOCS /数据库+探查 – 2011-05-19 09:45:01