如何将MongoDB的评价此查询:
db.testCol.find(
{
"$or" : [ {a:1, b:12}, {b:9, c:15}, {c:10, d:"foo"} ]
});
当文档扫描值,如果第一OR说法是正确的,对其他报表中也进行评估?
从逻辑上讲,如果MongoDB被优化,OR语句中的其他值不应该被评估,但我不知道MongoDB是如何实现的。
更新: 我更新了我的查询,因为它是错误的,它没有正确解释我想要完成的工作。我需要找到一组具有不同属性的文档,如果找到这些属性的组合,则必须返回该文档。
的SQL相当于我查询的是:
SELECT * FROM testCol
WHERE (a = 1 AND b = 12) OR (b = 9 AND c = 15) OR (c = 10 AND d = 'foo');
基本上,如果我使用$或在非索引字段上搜索,查询会很慢,因为它会为每个语句执行全表扫描(如果我理解正确)? – 2012-03-16 16:42:25
是的,但无论如何,执行全表扫描的查询都会很慢。在$的情况下,随着添加更多子句,它将逐渐变慢。实际上,没有人会对“大数据”数据库进行无索引查询。 – 2012-03-16 17:00:52
当我通过更改$或语句中的项目顺序进行解释时,我在nscanned中看到了两个不同的结果。这个查询是愚蠢的,因为它通过定义将包括查询中第一个的结果,但它表明mongo在某些情况下不会分别处理这两个项目:https://gist.github.com/0c9b9b74655ddab7f820 – Spencer 2012-03-16 19:20:42