14

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

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

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

1)有时,当索引不存在时,一些查询会非常非常慢。2)添加新索引(在我的项目中)会在数据库上产生非常高的负载,这明显减慢了我的网站。

4

1 回答 1

13

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

相反,我建议使用后台选项在单个节点上构建索引,如果这是您的配置 - 这将花费更长的时间,但不会过多地干扰您的正常操作。完成后,您可以在闲暇时删除旧索引。

但是,如果您有副本集(推荐),您应该知道索引创建始终(当前)在辅助节点的前台完成。如果您想避免对辅助节点造成负载,则应按照此处概述的步骤一次取出一个成员并在重新加入集合之前构建所需的索引:

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

更新

从 2.6 版本开始,可以在辅助节点上构建后台索引(有关详细信息,请参阅发行说明)。这不会被向后移植到以前的版本,因此上述说明对于 2.6 之前的版本是正确的。

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

于 2012-12-07T19:38:48.863 回答