2016-09-15 23 views
0

括号是否会影响在WHERE子句中应用过滤器条件的顺序?假设我有上千个文档:DocumentDB括号中WHERE

{ 
    "batchId": "<random_guid>", 
    "size": "<small, medium, or large>", 
    "details": 
    { 
     ... 
    } 
} 

现在在我的收藏中,所有文档都属于50个批次之一。批量按尺寸进一步细分,每批大约有1000个文件。

因此在批量x与大小small查询所有文档时,我想先过滤掉所有那些不属于批量x,然后从该子集,以减少文件数量进行搜索,的文件只选择那些大小为small的文件。

将这个查询实现上述行为:SELECT * FROM r WHERE ((r.batchId = 'x') AND r.size = 'small')

回答

1

括号不会影响过滤器表达式是如何评估的。对于表达式评估顺序,这里可能要紧的是WHERE子句中的表达式顺序(即(r.batchId ='x'AND r.size ='small')与(r.size ='small'AND r。 batchId ='x'))。虽然查询引擎对表达式进行重新排序以实现最佳执行计划,但如果它确定没有通过更改顺序而感知到的收益,它将保留输入查询表达式顺序。 在这种特殊情况下,顺序无关紧要,因为两个表达式都将根据索引进行评估,只有满足这两个条件的文档才会被加载。