文档的大小会影响 find() 查询的性能吗?
Does the size of a document affect performance of a find() query?
MongoDB 文档的大小会影响 find() 查询的性能吗?
我运行在MongoDBshell
中对集合进行以下查询
r.find({_id:ObjectId("5552966b380c2dbc29472755")})
整个文档有 3MB。当我 运行 此查询时,操作大约需要 8 秒才能执行。该文档有一个 "salaries" 属性,它占文档大小的大部分(大约 2.9MB)。因此,当我省略薪水 属性 和 运行 时,以下查询只需不到一秒的时间。
r.find({_id:ObjectId("5552966b380c2dbc29472755")},{salaries:0})
我只在 运行 find() 查询时才注意到这种性能差异。当我 运行 find().count() 查询时没有区别。似乎只有当我想获取整个文档时性能才会下降。
该集合从不更新(大小从不改变),在 _id 上设置了一个索引,并且我在数据库上 运行 repairDatabase()。我在网上搜索过,但找不到令人满意的答案来解释为什么存在性能差异。任何见解和建议将不胜感激。谢谢
我认为您刚刚 运行 的实验是对您自己问题的回答。
Mongo 将默认索引 _id
字段,因此文档大小不应影响定位文档所需的时间长度,但如果它是 3MB,那么您可能会注意到实际下载该数据的差异。我想这就是为什么如果您省略某些字段,它会花费更少的时间。
要更好地了解查询 运行 实际需要多长时间,试试这个:
r.find({
_id: ObjectId("5552966b380c2dbc29472755")
})
.explain(function(err, explaination) {
if (err) throw err;
console.log(explaination);
});
如果 salaries
是 3MB 的罪魁祸首及其结构化数据,那么为了加快速度,您可以尝试 A) 将其拆分为单独的 mongo 文档或 B) 基于子查询该文档的属性,在 A 和 B 两种情况下,您都可以建立索引以保持这些查询的速度。
MongoDB 文档的大小会影响 find() 查询的性能吗?
我运行在MongoDBshell
中对集合进行以下查询r.find({_id:ObjectId("5552966b380c2dbc29472755")})
整个文档有 3MB。当我 运行 此查询时,操作大约需要 8 秒才能执行。该文档有一个 "salaries" 属性,它占文档大小的大部分(大约 2.9MB)。因此,当我省略薪水 属性 和 运行 时,以下查询只需不到一秒的时间。
r.find({_id:ObjectId("5552966b380c2dbc29472755")},{salaries:0})
我只在 运行 find() 查询时才注意到这种性能差异。当我 运行 find().count() 查询时没有区别。似乎只有当我想获取整个文档时性能才会下降。
该集合从不更新(大小从不改变),在 _id 上设置了一个索引,并且我在数据库上 运行 repairDatabase()。我在网上搜索过,但找不到令人满意的答案来解释为什么存在性能差异。任何见解和建议将不胜感激。谢谢
我认为您刚刚 运行 的实验是对您自己问题的回答。
Mongo 将默认索引 _id
字段,因此文档大小不应影响定位文档所需的时间长度,但如果它是 3MB,那么您可能会注意到实际下载该数据的差异。我想这就是为什么如果您省略某些字段,它会花费更少的时间。
要更好地了解查询 运行 实际需要多长时间,试试这个:
r.find({
_id: ObjectId("5552966b380c2dbc29472755")
})
.explain(function(err, explaination) {
if (err) throw err;
console.log(explaination);
});
如果 salaries
是 3MB 的罪魁祸首及其结构化数据,那么为了加快速度,您可以尝试 A) 将其拆分为单独的 mongo 文档或 B) 基于子查询该文档的属性,在 A 和 B 两种情况下,您都可以建立索引以保持这些查询的速度。