MongoDB:what’;当mongodb删除索引时发生

MongoDB:what’;当mongodb删除索引时发生,mongodb,database,nosql,Mongodb,Database,Nosql,MongoDB创建索引在大型数据收集中速度较慢,易于理解。但是为什么删除索引的操作如此之快?执行删除索引操作后,数据结构是否有任何变化?在集合上创建一个新索引就像创建一个按B树排列的新集合,因此您可以快速搜索关键字段。这看起来像是在复制集合的一部分 所以对于删除索引,它就像删除一个集合,mongo只需删除索引集合,然后就完成了 我不确定你是否知道文件系统是如何工作的,但是你可以用同样的方法来考虑这个问题。当你把文件拷贝到磁盘上,这需要时间。但是,如果从磁盘删除文件,所需时间很短,因为文件系统只是

MongoDB
创建索引
在大型数据收集中速度较慢,易于理解。但是为什么
删除索引的操作如此之快?执行
删除索引
操作后,数据结构是否有任何变化?

在集合上创建一个新索引就像创建一个按B树排列的新集合,因此您可以快速搜索关键字段。这看起来像是在复制集合的一部分

所以对于删除索引,它就像删除一个集合,mongo只需删除索引集合,然后就完成了


我不确定你是否知道文件系统是如何工作的,但是你可以用同样的方法来考虑这个问题。当你把文件拷贝到磁盘上,这需要时间。但是,如果从磁盘删除文件,所需时间很短,因为文件系统只是将其标记为未使用,几乎不需要任何时间。

这意味着,如果我创建更多索引,它将在磁盘或其他磁盘中创建更多的
索引集合
,以及数据的增加,插入数据将需要更多的
索引集合的更多关系,因此插入数据将很慢?是的,但并不显著,B-Tree将花费n(log(n))时间来查找项,也需要n(log(n))时间来更新项,因此插入数据将“慢”,但除非您在短时间内写入大量数据,否则您不会感觉到它。您还可以在创建索引时使用“background”选项,因此在插入/更新数据时,无需等待索引更新。您应该知道mongodb并不总是在更新后立即将数据写入磁盘,它总是将数据写入内存并在发生某些特殊事件时将其持久化。