mongo使用更多标准查找查询执行速度更快吗?

时间:2014-06-26 22:26:14

标签: performance mongodb optimization mongodb-query query-performance

通过使用更多条件限制find(或findOne)来提高性能吗?

一个例子:

db.users.find({_id : ObjectId("111111111111111111111111")})

db.users.find({_id : ObjectId("111111111111111111111111"), accountId : ObjectId("22222222222222222222222")})

另一个例子:

db.users.find({full_name: 'Lionel Messi'})

db.users.find({full_name : 'Lionel Messi', first_name : 'Lionel', last_name : 'Messi' })

3 个答案:

答案 0 :(得分:1)

通常,没有。因为mongoDB倾向于返回找到的前N个值的光标,如果您更多特定,则需要更长时间才能找到符合该条件的值。

如果您想查看可能影响查询速度的内容,最好使用explain()方法。

请点击此处了解详情:http://docs.mongodb.org/manual/tutorial/analyze-query-plan/

答案 1 :(得分:1)

不,因为您使用的是唯一的_id

至于使查询变慢:如果{_id, accountId}上没有复合索引,那么 最多可以减慢纳秒,因为_id索引的文档一次已经发现它们将被加载到内存中以匹配accountId字段。

MongoDB会在查看不在所选索引中的字段之前按索引查找。

然而,由于您的查询(未被发现)将在返回之前加载文档,因此减慢查询速度的唯一因素是最终匹配速度基本上可以忽略不计。

答案 2 :(得分:0)

在这种情况下没有。 _id会自动编入索引,并唯一标识文档。第一个标准

{_id : ObjectId("111111111111111111111111")}

将使用索引查找文档。检查accountId的值实际上会使查询变慢,因为MongoDB必须检查其他值。