通过使用更多条件限制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' })
答案 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必须检查其他值。