1

我们将 MongoDB 用于我们的 Application 。在 crontab 计划的帮助下,我们有一些在每个月的第一天运行的工作(报告工作)。

该脚本负责查询特定集合、生成 excel 表并发送该结果的邮件。

由于脚本每月运行一次,我想每次都不需要在该集合上创建索引,除非在该作业预定时间

那么有没有可能,我只能在那个时候对特定的集合有一个索引??

我已经看到了 ttl 的 mongodb 功能,但我没有看到任何这样的选项(可能是我忽略了)

请让我知道是否有可能,我只能在那个时候(每个月的第一天)在一个集合上创建一个索引,然后每次都删除它。

4

1 回答 1

6

通过 db.collection.ensureIndex 构建索引是可以使用 MongoDB 运行的最昂贵的操作之一。我不建议您销毁索引并在您想使用它时重建它。

对集合使用索引几乎没有缺点,即使您不使用它也是如此。如果您非常需要空间,则索引确实会占用磁盘上的一小部分额外空间。如果您对此感到担忧,可以使用它db.collection.stats()来查看索引的大小。此外,当您拥有索引时,写入数据库的插入、删除和更新时间会稍长。但是,实际上,对于典型的用例来说,这种开销可能可以忽略不计。

如果您确实想确保该索引不用于除每月脚本运行的查询之外的查询,您可以使用$hint运算符强制使用特定的不同索引,或者$natural不使用索引按顺序运行。

于 2013-09-18T18:45:56.370 回答