导入转储后,很多人都在说“后台索引”。 但是如果你没有转储呢? 例如,我们正在使用MongoDB来启动一个Docker容器,并将其安装在不同的服务器上。 数据将被逐步添加。 我们一次只谈一条logging。 在数据库创build时做一个ensureIndex会是一件坏事吗? 或者创build一个触发器? 我没有看到这个问题的任何答案。 大家都说“加载数据后再做”。 加载数据后,我不会得到机会,因为正如我所说,一次只有一个logging进入。如果用户试图然后search该logging,按字段名称,他们将永远等待它没有索引。 关于怎么做的意见? (请礼貌地回答。)
我的一般build议是在需要广泛使用之前添加一个索引。 没有任何支持索引的查询将导致集合扫描,随着集合中的数据增长,这将变得更加耗时和影响。
在插入任何数据之前创build一个索引就可以了(不pipe后面是单独插入还是批量导入)。 使用较less的索引插入可能会更快一些,但是如果在导入结束时要求这些索引,则可能不会节省大量时间。
如果您有现有数据并希望创build新索引,则build议使用后台索引 。 就像在MongoDB 3.4中一样,前台索引构build对于拥有该集合的数据库来说是一个阻塞操作,除非该数据库没有被使用,否则对于生产环境来说是不可取的。 后台索引构build将花费比前台索引构build更长的时间,但不会阻止读取或写入。
注意:后台索引选项仅影响初始索引构build。 索引创build后,任何后续更新始终作为文档更新的一部分执行。