Sql server 具有union的视图如何处理

Sql server 具有union的视图如何处理,sql-server,tsql,sql-server-2012,union,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中选择所有数据,然后为每个Select语句应用where或将其放置where?SQL Server可以根据需要移动谓

假设我有这样的观点

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中选择所有数据,然后为每个Select语句应用where或将其放置where?

SQL Server可以根据需要移动谓词以优化查询。视图实际上是宏,在进行优化之前,这些宏被扩展到查询体中

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

对于这样一个简单的例子,我希望它根据基表计算谓词,然后执行联合,但只有检查数据库上的查询计划以及表和索引,才能肯定地回答这个问题。

SQL Server可以根据需要移动谓词,以优化查询。视图实际上是宏,在进行优化之前,这些宏被扩展到查询体中

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


对于这样一个简单的例子,我希望它根据基表计算谓词,然后执行联合,但只有检查数据库上的查询计划以及表和索引才能肯定地回答这个问题。

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


请注意,与联合相反的联合都需要排序来删除重复项。

取决于优化器、基数、可用索引等,但它会在适当的情况下将条件应用于基表

请注意,与联合相对的联合都需要排序以删除重复项。

打开“显示实际执行计划”按钮,然后运行查询。打开“显示实际执行计划”按钮,然后运行查询。