假设我有一个像这样的视图
CREATE VIEW MyView
AS
SELECT Id, Name FROM Source1
UNION
SELECT Id, Name FROM Source2
然后我查询视图
SELECT Id, Name From MyView WHERE Name = 'Sally'
SQL Server内部首先会从Source1和Source2中选择所有数据,然后应用where或者它将每个Select语句的位置放在哪里?
答案 0 :(得分:5)
SQL Server 可以根据需要移动谓词以优化查询。视图实际上是在优化发生之前扩展到查询主体的宏。
在任何特定情况下它的作用都不是100%可以预测 - 因为在SQL中,你告诉系统你想要什么,而不是如何做到
对于这样一个简单的例子,我期望它根据基表计算谓词,然后执行union,但只检查你的>上的查询计划em>数据库,您的表和索引可以肯定地回答这个问题。
答案 1 :(得分:1)
取决于优化器,基数,可用的索引等,但是它会在适当的情况下将标准应用于基表。
请注意,您的UNION反对UNION ALL需要SORT来删除重复项。