在标准 SQL 中,union all
不保证 a 的结果是任何顺序的。所以,像:
select 'A' as c union all select 'B'
可以以任何顺序返回两行(尽管实际上在我所知道的任何数据库上,“A”将出现在“B”之前)。
在 SQL Server 中,这变成了使用“串联”物理操作的执行计划。
我可以很容易地想象连接操作会扫描它的输入,返回任何有可用记录的输入。但是,我在网上找到了以下声明(此处):
查询处理器将按照运算符在计划中出现的顺序执行此计划,第一个是最上面的,最后一个是结束的。
问题:这在实践中是真的吗?这能保证是真的吗?
我没有在 Microsoft 文档中找到任何参考,说明输入是按顺序扫描的,从第一个到最后一个。另一方面,每当我尝试运行它时,结果表明输入确实是按顺序处理的。
有没有办法让引擎一次处理多个输入?我的测试(使用比常量复杂得多的表达式)是在支持并行的 8 核机器上进行的,并且大多数查询确实利用了并行性。