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

Do you get the same performance using index prefixes?

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

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

然后我创建如下:

{myValue: 1, otherValue: 1}

如果我执行以下查询:

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

如果我在 myValue 字段上有索引,我的索引是否会获得相同的性能?或者性能是否有所下降,因为它使用了 index Prefix?

A "compound index" 是你的 "link" 的正确术语,不会在 "read" 上产生任何性能问题(因为写入新条目显然是更多信息)而不是仅在查询中使用的单个字段。除了一个例外。

如果您使用 "multi-Key" 索引,这意味着 "array" 项作为索引的一部分,那么您实际上会在每个键的索引中创建 n 更多项。如:

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

{ "a": 1, "b": 1 } 上的索引在基本术语中的意思是:

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

所以基本上每个要扫描的数组元素一个索引条目。

但除此之外,单个元素不会影响性能,一般排除 "obvious" 需要加载一个包含比你 "need to use" 每个元素更多数据的结构到内存中。

所以如果你不需要它就不要使用它。并创建 "two" 个索引(一个用于复合索引,一个用于单个字段)可能会节省您的内存,但总体而言,它会 "cost" 您的写入性能和存储 space。