括号是否会影响在WHERE子句中应用过滤条件的顺序?假设我有这个模式的数千个文档:
{
"batchId": "<random_guid>",
"size": "<small, medium, or large>",
"details":
{
...
}
}
现在,在我的收藏中,所有文件属于50个批次中的一个。按批量进一步细分批次,每批大约1000个文档。
因此,在批处理small
中查询大小为x
的所有文档时,我想先减少所有不属于批处理的文档,减少要搜索的文档数量x
,然后从该文档子集中选择大小为small
的文档。
此查询是否会实现上述行为:SELECT * FROM r WHERE ((r.batchId = 'x') AND r.size = 'small')
答案 0 :(得分:1)
括号不会影响过滤器表达式的计算方式。对于表达式评估顺序,这里可能重要的是WHERE子句中表达式的顺序(即(r.batchId ='x'AND r.size ='small')vs。(r.size ='small'AND r。 batchId ='x'))。虽然查询引擎重新排序表达式以实现最佳执行计划,但如果它断定更改顺序没有感知到的收益,它将保留输入查询表达式顺序。 在这种特定情况下,顺序无关紧要,因为两个表达式都将根据索引进行评估,并且只会加载满足这两个条件的文档。