假设我有一个包含以下文档的集合:
{
_id: ObjectId(),
myValue: 123,
otherValue: 456
}
然后我创建如下:
{myValue: 1, otherValue: 1}
如果我执行以下查询:
db.myCollection.find({myValue: 123})
如果我的仅 myValue
字段的索引,我会获得与索引相同的效果吗?或者,由于它使用index Prefix?
答案 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 }
因此,每个要扫描的数组元素基本上都有一个索引条目。
但是否则单个元素不会影响性能,通常排除“明显”需要加载一个结构,该结构包含的数据多于“需要使用”到每个元素的内存中的数据。
因此,如果您不需要它,请不要使用它。创建“两个”索引(一个用于单个字段的复合索引)可能会节省内存,但一般来说它会“降低”写入性能和存储空间。