使用索引前缀可以获得相同的性能吗?
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。
假设我有一个包含如下文档的集合:
{
_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。