MongoDB的“ limit()”方法如何影响查询的获胜计划?

时间:2018-11-08 03:20:58

标签: mongodb mongodb-query

我有一个MongoDB集合,其中包含游戏中用于配对的记录。我在进行这样的查询,以使用户处于特定得分范围内,针对特定游戏模式,并按ID升序排序(这使我获得了较早的记录):

  

db.matchmaking.find({matchmakingId:“ test”,得分:{$ lte:2000,$ gte:400}})。sort({_id:1})

因为可能有很多记录,所以我创建了此索引以使查询更快:

  

matchmakingId_1_score_-1_id_1

使用“ explain()”方法,我可以验证上面的查询正在使用我的索引。它执行IDXSCAN(我的索引)-> FETCH(无过滤器)-> SORT_KEY_GENERATOR-> SORT->完成。

但是,我还想将返回的文档数限制为10个。因此,我添加了limit方法:

  

db.matchmaking.find({matchmakingId:“ test”,得分:{$ lte:2000,$ gte:400}})。sort({_id:1})。limit(10)

当我现在使用“ explain()”时,它不再使用我的索引!相反,它使用以下计划:IDXSCAN(_id)-> FETCH(对matchmakingId,score进行过滤)-> LIMIT。

因此,这引发了几个问题:

1)为什么添加“ limit()”方法会导致计划发生如此大的变化?

2)“ limit()”版本实际上更有效吗?还是这取决于数据库中的记录量?

3)如果我将使用“ limit()”这样的方式访问这些记录,是否值得维护索引?还是不使用?

0 个答案:

没有答案