Performance mongo find查询是否使用更多条件执行得更快?

Performance mongo find查询是否使用更多条件执行得更快?,performance,mongodb,optimization,mongodb-query,query-performance,Performance,Mongodb,Optimization,Mongodb Query,Query Performance,是否通过使用更多标准限制查找(或findOne)来提高性能 例如: db.users.find({_id : ObjectId("111111111111111111111111")}) db.users.find({_id : ObjectId("111111111111111111111111"), accountId : ObjectId("22222222222222222222222")}) 另一个例子: db.users.find({full_name: 'Lionel Mess

是否通过使用更多标准限制查找(或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' })

通常不会。因为mongoDB倾向于返回找到的前N个值的游标,如果您更具体一些,则需要更长的时间才能找到符合该条件的值

如果您想了解什么会影响查询速度,最好使用
explain()
方法


有关更多详细信息,请参见此处:

在本例中,
\u id
是自动索引的,它唯一地标识文档。第一个标准

{_id : ObjectId("111111111111111111111111")}

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

否,因为您使用的是唯一的
\u id

至于使查询速度变慢:如果
{u id,accountId}
上没有复合索引,则查询速度最多可能会减慢纳秒,因为一旦找到
\u id
索引的文档,它们将加载到内存中,以匹配
accountId
字段

MongoDB将在查看所选索引中未包含的字段之前按索引查找


但是,由于您的查询(未覆盖)将在返回之前加载文档,因此唯一会减慢查询速度的是最终匹配,这在速度上基本上是负的。

我明白了。添加了第二个示例。还对非唯一的_-id情况感到好奇。@Chandrew在这种情况下:事实上,如果查询命中复合索引i5t会比不命中更快,并且只按
全名
搜索,因为加载多个文档的结果节省了时间