设置了相关索引后,MongoDB更新速度较慢

设置了相关索引后,MongoDB更新速度较慢,mongodb,indexing,sharding,Mongodb,Indexing,Sharding,我正在测试一个分片设置的小示例,我注意到当搜索字段被索引时,更新嵌入字段的速度会变慢 我知道索引在插入期间会更新,但是查询的搜索索引也会更新吗 对更新的查询和更新的字段与任何方式都不相关 e、 g.(使用玩具数据进行测试): 在上面的示例中,更新的查询位于a、b、c上 更新的值只影响数据 我能想到的唯一原因是,即使更新不在索引字段上,索引也会被更新。更新的搜索部分似乎在使用explain发出“find”查询时使用索引 还有其他原因吗?我认为伯克利大学在评论中给出了最好的解释。 文档会移动,因为它

我正在测试一个分片设置的小示例,我注意到当搜索字段被索引时,更新嵌入字段的速度会变慢

我知道索引在插入期间会更新,但是查询的搜索索引也会更新吗

对更新的查询和更新的字段与任何方式都不相关

e、 g.(使用玩具数据进行测试):

在上面的示例中,更新的查询位于a、b、c上 更新的值只影响数据

我能想到的唯一原因是,即使更新不在索引字段上,索引也会被更新。更新的搜索部分似乎在使用explain发出“find”查询时使用索引


还有其他原因吗?

我认为伯克利大学在评论中给出了最好的解释。 文档会移动,因为它会变大,并且每次都会更新索引。
正如他还指出的,更新多个键是“不好的”……我认为我现在将避免这种设计。

请给出索引键和正在更新的键的示例。如果需要,索引将被更新—如果文档因其大小分配过大而移动,也就是说。如果您包含一个您正在进行的实际更新的示例,则更容易判断是否会发生这种情况。请注意,更新多键索引尤其糟糕,因为每个数组值需要更新一个索引项。
{

 id:... (sharded on the id)

 embedded :[{ 'a':..,'b':...,'c':.... (indexed on a,b,c),

               data:.... (data is what gets updated)
            },
            ...
           ]

}