我需要通过两个字段(唯一索引)索引集合,比如field1和field2。在性能方面有什么更好的方法:
创建常规的双列索引
- 或 -
将这两个字段合并到一个文档字段{field1:value,field2:value2}并索引该字段?
注意:我将始终一起查询这两个字段。
答案 0 :(得分: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 :(得分:1)
我会在两个字段上创建一个复合索引。这将占用更少的磁盘空间,因为您不需要存储额外的组合字段,并且在第一个字段上为您提供额外索引的奖励,即超过{ a:1, b:1 }
的索引也是{的索引。 {1}}。