2015-06-17 17 views
0

比方说,我有一个收集这种结构,索引在这种情况下是如何帮助的是mongo db?

student_id数据,得分,score_type

我有得分的指标,我想查询学生使用id = 10000和秩序的评分得分结果。

我跑我的数据集查询,这是查询计划是什么,

1:首先,DB使用上得分索引文件进行排序。
2:然后它的文档上的过滤器ID:1000

即使我们使用索引在这里,所有的文档都在这里考察的比赛(因为在student_id数据没有索引)。我的问题是,如果所有的文件都要检查,为什么分贝不考虑这个备用计划

1:做一个集合搜索并做过滤。
2:然后使用分数上的索引进行排序。

这里排序将在一个较小的数据集上完成,所以它应该更快。

第二个计划有什么问题?

+0

奇怪的是,甚至有上'一个单独的索引student_id'不会帮助它做滤波第一。我无法解释它。使用@Markus –

回答

1

每个查询只能使用一个索引。

所以,如果你想查询的关键和排序为另一个,则需要多键索引:

db.collection.ensureIndex({student_id:1,score:1}) 
db.collection.find({student_id: 1000}).sort({score:1}) 
+0

建议的复合指数现在是否指数交叉点不是一段时间了? –

+0

@SergioTulentsev不排序。 [“MongoDB不能对下列查询使用索引交叉排序:db.orders.find({qty:{$ gt:10}}).sort({status:1})”](http://docs.mongodb .ORG /手动/型芯/索引相交/#索引相交和排序)。但是,请随时编辑。 –