【问题标题】:MongoDB: Does the $and operator impact query performance?MongoDB:$and 运算符会影响查询性能吗?
【发布时间】:2019-10-22 06:33:49
【问题描述】:

我在项目中有相当复杂的查询。它可能(取决于用户的参数)有很多条件,我将它们放在 $and$or 运算符下。

这是一个非常简单的例子:

docs.find({name:"shaq", organization: "myorg", url:{$exists:true}})

因此,在上述情况下,将检索满足所有三个条件的文档。 使用此代码可以实现相同的结果:

docs.find({$and:[
 {name:"shaq"}, 
 {organization:"myorg"}, 
 {url:{$exists:true}}
]})

我想知道这对性能有何影响。它实际上是一样的,还是因为额外的操作员而工作得更慢,或者因为根据official docs而工作得更快:

$and 运算符使用短路评估,这意味着如果首先 列表中的表达式返回 false mongo 不会计算 剩下的表达式

所以问题是:在$and 运算符下放置条件会影响性能吗?如果是,那有什么影响?

附: 我尝试使用 mongos explain() 调查结果,但它没有回答我的问题,因为我的真实查询量很大,导致报告庞大,真的很难分析。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    尝试使用较小的查询来调查结果。

    我在我的一个数据库上进行了实验,比较了这两个版本,并发现执行计划没有差异,给定一个包含 3 个选项的相当简单的查询。这几乎是我所期望的,因为它们确实应该等同于同一个查询。

    我想你会发现查询最终使用的索引对性能的影响比查询的格式更大。

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 2014-07-13
      • 2011-04-09
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多