可以使用 MongoDB 的查询计划(Explain Plan)来确认查询和排序是否涉及回表。执行 explain() 命令来查看查询计划:
db.collection.find({ _id: { $in: [ObjectId("60c72b2f5f1b2c6d88e3e3a1"), ObjectId("60c72b2f5f1b2c6d88e3e3a2")] })
.sort({ age: 1 })
.explain("executionStats");
查看输出中的 totalDocsExamined 和 totalKeysExamined:
- 如果
totalDocsExamined等于totalKeysExamined,则说明查询和排序没有回表。 - 如果
totalDocsExamined大于totalKeysExamined,则说明查询和排序涉及回表。
结论
通过主键(_id)使用 in 查询后再用另一个字段排序时,是否需要回表取决于索引的设计。创建合适的复合索引可以避免回表,从而提高查询和排序的性能。如果排序字段没有被索引覆盖,则可能需要回表获取排序字段的数据。
563

被折叠的 条评论
为什么被折叠?



