我希望始终确保我的馆藏已编入索引,并且我会在半定期的基础上添加和删除它们。
假设我在每个Web请求时都与DB建立了新的连接,每次连接时都可以执行一些db.collection.ensureIndex({field:true})语句吗?
答案 0 :(得分:8)
据我了解,MongoDB只是查询系统Collection,以便在创建索引之前查看索引是否存在...
http://www.mongodb.org/display/DOCS/Indexes#Indexes-AdditionalNotesonIndexes
> db.system.indexes.find();
您可以运行getIndexes()来查看Collection的索引
> db.things.getIndexes();
所以,你只需添加一个查询;它不会重建它或做任何其他不明显的事情。
那就是说,我认为这不是一个特别好的主意。它会增加不必要的开销,更糟糕的是可能会在创建索引时锁定数据库...因为默认情况下创建索引会阻塞数据库(除非你在后台运行它),如下所示:
> db.things.ensureIndex({x:1}, {background:true});
然而请注意......
...背景模式构建使用了 增量方法来构建 索引比默认值慢 前台模式:构建时间 指数会更大。
我认为,当您 添加集合 而不是每次连接到数据库时,在代码中执行此操作会更好。无论如何你为什么要添加和删除它们?