哪个查询在mongodb中执行得更快:使用$ in range或$ gte和$ lte?

时间:2017-03-24 10:08:08

标签: mongodb pymongo

我对性能问题感兴趣。假设我有一个字段ref的集合(在每个文档中表示)。我想要的是查找特定范围内的所有文档(例如,[1-1,000,000]。在db性能方面,以下查询是否有任何差异

db.test.find({"ref": {"$gte":1, "$lte": 1000000}})db.test.find({"ref": {"$in": [1,2,3, ..., 1000000]}})

其他问题是关于内存消耗。如果我使用pymongo驱动程序,哪种查询更适合这种情况?

1 个答案:

答案 0 :(得分:0)

存在巨大差异,因为范围查询将在内部转换为正则表达式查询,如果“ref”字段上有索引,则几乎可以在任何时间评估覆盖查询。

查询传递元素列表的位置有点重,因此需要花费更多时间通过线路发送它,之后MongoDb引擎必须评估每个数组元素与每个文档属性的比较。