具有联合的视图如何处理哪里

时间:2017-05-19 08:46:06

标签: sql-server tsql sql-server-2012 union

假设我有一个像这样的视图

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语句的位置放在哪里?

2 个答案:

答案 0 :(得分:5)

SQL Server 可以根据需要移动谓词以优化查询。视图实际上是在优化发生之前扩展到查询主体的宏。

在任何特定情况下它的作用都不是100%可以预测 - 因为在SQL中,你告诉系统你想要什么,而不是如何做到

对于这样一个简单的例子,我期望它根据基表计算谓词,然后执行union,但只检查你的上的查询计划em>数据库,您的表和索引可以肯定地回答这个问题。

答案 1 :(得分:1)

取决于优化器,基数,可用的索引等,但是它会在适当的情况下将标准应用于基表。

请注意,您的UNION反对UNION ALL需要SORT来删除重复项。