我们说我有一个具有这种结构的集合,
student_id数据,得分,score_type
我有分数索引,我想查询id = 10000的学生的分数,并按分数排序。
我在我的数据集上运行查询,这就是查询计划,
1:首先,db使用分数索引对文档进行排序 2:然后它对ID为1000的文档进行过滤
即使我们在这里使用索引,这里也会检查所有文档以进行匹配(因为student_id上没有索引)。我的问题是,如果要检查所有文件,为什么数据库不考虑这个备用计划
1:进行集合搜索并进行过滤 2:然后使用分数索引进行排序。
这里将对较小的数据集进行排序,因此它应该更快。
第二个计划有什么问题?
答案 0 :(得分:1)
每个查询只能使用一个索引。
因此,如果要查询密钥并对另一个密钥进行排序,则需要一个多密钥索引:
db.collection.ensureIndex({student_id:1,score:1})
db.collection.find({student_id: 1000}).sort({score:1})