这两种性能方面有什么区别吗?
-- eliminate duplicates using UNION
SELECT col1,col2,col3 FROM Table1
UNION SELECT col1,col2,col3 FROM Table2
UNION SELECT col1,col2,col3 FROM Table3
UNION SELECT col1,col2,col3 FROM Table4
UNION SELECT col1,col2,col3 FROM Table5
UNION SELECT col1,col2,col3 FROM Table6
UNION SELECT col1,col2,col3 FROM Table7
UNION SELECT col1,col2,col3 FROM Table8
-- eliminate duplicates using DISTINCT
SELECT DISTINCT * FROM
(
SELECT col1,col2,col3 FROM Table1
UNION ALL SELECT col1,col2,col3 FROM Table2
UNION ALL SELECT col1,col2,col3 FROM Table3
UNION ALL SELECT col1,col2,col3 FROM Table4
UNION ALL SELECT col1,col2,col3 FROM Table5
UNION ALL SELECT col1,col2,col3 FROM Table6
UNION ALL SELECT col1,col2,col3 FROM Table7
UNION ALL SELECT col1,col2,col3 FROM Table8
) x
Run Code Online (Sandbox Code Playgroud)
San*_*kar 22
之间的区别联盟和联盟所有是UNION ALL不会消除重复行,而是刚刚从适合您查询具体的所有表中提取所有行并将它们组合成一个表.
一个UNION语句有效确实对结果集的SELECT DISTINCT.
如果从Union All结果集中选择Distinct,则输出将等于 Union结果集.
编辑:
CPU成本表现:
让我用例子解释一下:
我有两个问题.一个是Union,另一个是Union All
SET STATISTICS TIME ON
GO
select distinct * from (select * from dbo.user_LogTime
union all
select * from dbo.user_LogTime) X
GO
SET STATISTICS TIME OFF
SET STATISTICS TIME ON
GO
select * from dbo.user_LogTime
union
select * from dbo.user_LogTime
GO
SET STATISTICS TIME OFF
Run Code Online (Sandbox Code Playgroud)
我确实在SMSS的同一查询窗口中运行了这两个.让我们看看SMSS中的执行计划:
会发生什么情况,使用Union All和Distinct的查询将比使用Union的查询花费更多的CPU成本.
按时表现:
UNION ALL:
(1172 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 39 ms.
Run Code Online (Sandbox Code Playgroud)
联盟:
(1172 row(s) affected)
SQL Server Execution Times:
CPU time = 10 ms, elapsed time = 25 ms.
Run Code Online (Sandbox Code Playgroud)
因此,Union在性能方面明显优于Union All