使用索引前缀获得相同的性能吗?

时间:2015-06-15 15:40:37

标签: performance mongodb indexing

假设我有一个包含以下文档的集合:

{
   _id: ObjectId(),
   myValue: 123,
   otherValue: 456
}

然后我创建如下:

{myValue: 1, otherValue: 1}

如果我执行以下查询:

db.myCollection.find({myValue: 123})

如果我的 myValue字段的索引,我会获得与索引相同的效果吗?或者,由于它使用index Prefix

,性能会有所降低

1 个答案:

答案 0 :(得分:1)

"compound index"这是“链接”的正确术语不会在“读取”上创建任何性能问题(因为编写新条目显然是更多信息)而不是仅在单个字段上使用的索引查询。有一个例外。

如果您使用"multi-Key"索引,这意味着“数组”项目作为索引的一部分,那么您有效地在每个键的索引中创建n个项目。如:

{ "a": 1, "b": [ 1, 2, 3 ] }

{ "a": 1, "b": 1 }上的索引以基本术语表示:

{ "a": 1, "b": 1 },
{ "a": 1, "b": 2 },
{ "a": 1, "b": 3 }

因此,每个要扫描的数组元素基本上都有一个索引条目。

但是否则单个元素不会影响性能,通常排除“明显”需要加载一个结构,该结构包含的数据多于“需要使用”到每个元素的内存中的数据。

因此,如果您不需要它,请不要使用它。创建“两个”索引(一个用于单个字段的复合索引)可能会节省内存,但一般来说它会“降低”写入性能和存储空间。