Mongodb 当索引已经存在时,ensureIndex({field:1})的开销是多少?

Mongodb 当索引已经存在时,ensureIndex({field:1})的开销是多少?,mongodb,Mongodb,我希望始终确保我的集合被编入索引,并且我会半定期地添加和删除它们 假设我在每个web请求中都与DB建立了一个新的连接,每次连接时执行几个DB.collection.ensureIndex({field:true})语句可以吗?据我所知,MongoDB只需查询系统集合,查看索引是否存在,然后再创建它 可以运行getIndexes()查看集合的索引 > db.things.getIndexes(); 实际上,您只需添加一个查询;它不会重建它或做任何其他不明显的事情。 尽管如此,我认为这不是

我希望始终确保我的集合被编入索引,并且我会半定期地添加和删除它们


假设我在每个web请求中都与DB建立了一个新的连接,每次连接时执行几个DB.collection.ensureIndex({field:true})语句可以吗?

据我所知,MongoDB只需查询系统集合,查看索引是否存在,然后再创建它

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

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

尽管如此,我认为这不是一个特别好的主意。这将增加不必要的开销,更糟糕的是,在创建索引时可能会锁定数据库。。。由于默认情况下创建索引会阻止数据库(除非在后台运行它),因此:

但是请注意

。。。背景模式建筑使用 以渐进方式构建 比默认值慢的索引 前台模式:是时候构建 指数会更大

我认为在代码中添加集合时,而不是每次连接到数据库时,这样做会更好。你为什么要添加和删除它们

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