gpt4 book ai didi

mongodb - MongoDb $set 运算符(非索引字段)会很昂贵吗?

转载 作者:行者123 更新时间:2023-12-03 16:00:08 25 4
gpt4 key购买 nike

我有一个具有多个索引的集合,通常我必须将一些数据推送到该集合的数组中。我尝试过查看 MongoDb Doc,但我能得到的最好的结果是,

For inserts and updates to un-indexed fields, the overhead for sparse indexes is less than for non-sparse indexes. Also for non-sparse indexes, updates that do not change the record size have less indexing overhead.

我知道稀疏索引和非稀疏索引的区别,稀疏索引的开销会更少是有道理的。

但是为什么即使我只更新文档中的未索引字段,为什么所有其他索引都必须更新!是不是因为每个索引的数据都一样,所有的数据都要更新?

我的文档

var sample = new Schema({
***
student_list: [ {type :Schema.Types.Mixed}],
location: [ {type :Schema.Types.Mixed}],
****
});
student_list.studID will be indexed

{studID:1,city:M,Time:"... e}

现在我经常需要更新位置字段。查询

db.sample.find({student_list.studID:"studid"})
db.sample.find({student_list.studID:"studid", student_list.city:"M"})
all using student_list_studId_1 index

这种方法可以吗?或者我应该创建一个差异集合,并将每个学生列表作为单独的文档(每个示例文档将有多个学生 ID,这在差异示例文档中可能很常见)

最佳答案

索引在每次插入时更新的原因与文档大小及其分配有关。

假设该文档有 1765 字节,我们添加接下来的 950 字节(数据 + bson 开销),这可以执行给定文档的重定位,因为它不适合当前分配的数据 block -> 并且数据库引擎需要更新所有索引中的指针以指向新文档位置。

关于mongodb - MongoDb $set 运算符(非索引字段)会很昂贵吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37775269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com