【问题标题】:Do you get the same performance using index prefixes?您是否使用索引前缀获得相同的性能?
【发布时间】:2015-06-15 15:40:36
【问题描述】:

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

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

然后我创建如下:

{myValue: 1, otherValue: 1}

如果我执行以下查询:

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

如果我在 myValue 字段上有一个索引,我的索引会获得相同的性能吗?或者由于使用index Prefix,性能是否有所下降?

【问题讨论】:

    标签: performance mongodb indexing


    【解决方案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 }
    

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

    但除此之外,单个元素不会影响性能,一般排除“明显”需要将包含比您“需要使用”的数据更多的数据加载到每个元素的内存中的结构。

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

    【讨论】:

    • 很好的答案 - 谢谢!澄清一下,索引前缀是一个存在于复合索引中的概念。它与索引的使用有关——所以虽然复合索引和前缀是相关的,但它们并不是一回事。
    • @AbeMiessler 在 MongoDB 中使用“复合索引”的一般情况是,您希望在使用任何元素但不一定是所有元素的任何查询中使用该复合索引的“第一个”元素他们。所以这就是我要澄清你所说的话的意思。如果您不调用索引中的“第一个”元素,则不会使用它。
    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多