【问题标题】:What is the overhead of ensureIndex({field:1}) when an index already exists?当索引已经存在时, ensureIndex({field:1}) 的开销是多少?
【发布时间】:2011-01-03 23:30:39
【问题描述】:

我希望始终确保我的收藏已编入索引,并且我会半定期地添加和删除它们。

假设我在每次 Web 请求时都与数据库建立新连接,那么每次连接时执行几个 db.collection.ensureIndex({field:true}) 语句是否可以?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    据我了解,MongoDB 只会在创建索引之前查询系统集合以查看索引是否存在...

    http://www.mongodb.org/display/DOCS/Indexes#Indexes-AdditionalNotesonIndexes

    > db.system.indexes.find();
    

    您可以运行 getIndexes() 来查看集合的索引

    > db.things.getIndexes();
    

    实际上,您只需添加一个查询;它不会重建它或做任何其他不明显的事情。

    也就是说,我认为这不是一个特别好的主意。它会增加不必要的开销,更糟糕的是可能会在创建索引时锁定您的数据库......因为默认情况下创建索引会阻塞您的数据库(除非您在后台运行它),如下所示:

    > db.things.ensureIndex({x:1}, {background:true});
    

    但请注意...

    ...后台模式构建使用 渐进式的构建方法 比默认值慢的索引 前台模式:构建时间 索引会更大。

    我认为在添加集合而不是每次连接到数据库时在代码中执行此操作会更好。你为什么要添加和删除它们?

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多