我可以修改MongoDB中的现有索引而不删除它吗?

时间:2012-12-07 19:17:33

标签: mongodb indexing

我可以修改MongoDB中的现有索引而不删除它吗?我在文档中没有看到任何相关内容。

我在String字段上有一个非唯一索引。收集约6M文件。这是副本集。

我知道我可以删除索引并添加新索引。但由于两个原因,这是有问题的:

1)在索引不存在的时候,某些查询会非常慢。 2)添加新索引(在我的项目中)会在DB上产生非常高的负载,这会明显减慢我的网站速度。

1 个答案:

答案 0 :(得分:8)

没有办法像你描述的那样改变索引,如果有,我认为在性能方面的结果将是相似的 - 数据库如何在此操作进行时使用一半创建/更改的索引?

相反,我建议使用background option在单个节点上构建索引,如果这是您的配置 - 它将花费更长时间但不会干扰您的正常操作。完成后,您可以随意放弃旧索引。

然而,如果您有副本集(推荐),您应该知道索引创建始终(当前)在辅助节点的前台完成。如果你想避免加载你的辅助代码,那么你应该按照这里列出的步骤一次取出一个成员并在重新加入集合之前构建所需的索引:

http://docs.mongodb.org/manual/administration/indexes/#index-building-replica-sets

更新

从2.6版本开始,可以使用辅助文件构建后台索引(有关详细信息,请参阅release notes)。这不会被移植到以前的版本,因此上述说明适用于2.6之前的版本。

最后,作为一般说明,在后台构建的索引通常比前台构建的索引更大,效率更低,因此上述方法仍然有其用途。