【问题标题】:Mongo indexes for updates/inserts of fields用于更新/插入字段的 Mongo 索引
【发布时间】:2013-03-26 07:25:34
【问题描述】:

我正在尝试为集合中的所有文档插入一个新字段。 我在“user_id”字段上有一个升序索引。

a) 为了从索引中受益,被更新/插入的字段是否应该被索引包含/转换? b) 另外,考虑到我不进行任何范围操作,哈希索引在这种情况下的性能是否更高。

db.collA.update(  { user_id: 123 }
                , { $set : { newfield : "something" } }
                , { multi:true} ) 

【问题讨论】:

  • 将更新的字段放入索引是没有用的,除非您只希望更新索引而不是实际的磁盘文档。至于散列索引,我看不出它们在这里有什么帮助,即使您使用散列索引,MongoDB 仍然会进行内部范围查询,以查找通过 btree 部分的确切值,其值在此 id 的范围内(说范围 1-1000 适合您的 123),然后会进行一种二进制搜索来找到确切的值。使用哈希索引可能会将整个索引加载到 RAM 中,而不是您需要的段。
  • 谢谢。试图把我在 mongo 索引上读到的随机东西放在一起。你应该把它作为一个答案,我会接受它。
  • 我可能错过了最近几个版本中关于哈希索引的一些变化,所以我会看看是否有人有一些我忽略的金块

标签: mongodb


【解决方案1】:

回答问题的 A 部分: 不会。插入或更新现有文档的索引属性实际上会导致索引的性能问题。如果你打算大批量做这个,你可能应该在操作后重新索引或修复。

B 部分: 不。标准索引类型很好地涵盖了这个用例。如果“user_id”确实标识了一个文档,您可以考虑将其设为文档的“_id”,但是,这是一个有点高级的设计决策,并且对集合有影响(正面和负面)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2015-05-10
    • 2020-05-25
    相关资源
    最近更新 更多