FAQ: MongoDB索引
最后更新于
最后更新于
在本页面
本文档解决了有关MongoDB 一些常见问题 。有关索引的更多信息,请参见 。
要在集合上创建索引,请使用 方法。创建索引是一种管理性操作。通常,应用程序不应定期调用 。
注意
索引构建会影响性能;请参见 。管理员应在建立索引之前考虑性能影响。
针对已填充集合的MongoDB索引构建,需要针对该集合进行排他性读写锁定。在释放锁定之前需要对集合进行读取或写入锁定的操作必须等待。
*在版本4.2中进行了更改。
您不能在副本集的辅助成员上终止_复制_索引构建。您必须首先在主数据库上删除索引。二级服务器将复制删除操作,并在索引构建完成_后_删除索引。索引建立和删除之后的所有其他复制将会终止。
写操作可能需要更新索引:
如果写入操作修改了索引字段,则MongoDB将更新所有键中包含该字段的索引。
因此,如果您的应用程序是大量写入操作,则索引可能会影响性能。
译者:钟秋
update:小芒果
对于 "4.2"
,MongoDB使用优化的构建过程,该过程仅在索引构建的开始和结束时都保留排他锁。其余的构建过程将产生交叉的读写操作。
对于 "4.0"
,默认的前台索引构建过程将保留整个索引构建的互斥锁。background
索引在构建过程中_不会_获得排他锁。
有关索引构建过程的更多信息,请参见上的索引构建 。
基于副本集的索引具有特定的性能考虑因素和风险。有关更多信息,请参见。为了最大程度地减少对副本集(包括分片副本集)建立索引的影响,请使用在所述的滚动索引过程。
要返回当前正在运行的索引创建操作的相关信息,请参阅。要在或独立数据库上终止正在运行的索引创建操作,请使用 。部分构建的索引将被删除。
要列出集合的索引,请使用 方法。
要检查MongoDB如何处理查询,请使用 方法。
许多因素决定要索引的字段,包括 ,对多种的支持 以及。更多信息,请参见 和 。
包括一个为集合中的每个索引提供了大小信息的文档。
根据其大小,一个索引可能无法放入内存。当您的服务器具有足够的RAM用于索引和其余时,索引将加载进内存。当索引太大而无法放入RAM时,MongoDB必须从磁盘读取索引,这比从RAM读取要慢得多。
在某些情况下,索引不必_完全_适合RAM。有关详细信息,请参阅。
原文链接: