很多人说在导入转储后进行“后台索引”。但是如果你没有转储怎么办?例如,我们正在启动一个装有 MongoDB 的 Docker 容器,并将其安装在不同的服务器上。数据将逐个添加。我们一次讨论一条记录。在创建数据库时执行 EnsureIndex 会是一件坏事吗?或者创建一个触发器……?我没有看到这个问题的任何答案。每个人都说“在加载数据后执行它”。加载数据后,我将没有机会,因为正如我所说,一次只能输入一条记录。如果用户尝试按字段名称对该记录进行搜索,他们将永远等待,因为它没有索引。对此该怎么做?(请礼貌地回复。)
答案1
我的一般建议是在需要广泛使用索引之前添加索引。没有任何支持索引的查询将导致集合扫描,随着集合中数据的增长,这将变得更加耗时且影响深远。
在插入任何数据之前创建索引是可以的(无论随后是单独插入还是批量导入)。使用较少的索引插入可能会更快一些,但如果您在导入结束时需要这些索引,则总体时间节省可能并不明显。
后台索引如果您有现有数据并想创建新索引,则建议这样做。与 MongoDB 3.4 一样,前台索引构建对于保存该集合的数据库来说是一项阻塞操作,除非该数据库未在使用中,否则不建议在生产环境中使用。后台索引构建将比前台索引构建花费更长的时间,但不会阻塞读取或写入。
注意:后台索引选项仅影响初始索引构建。索引创建后,任何后续更新始终作为文档更新的一部分执行。