2014-10-20 133 views
0

使用SQL Server 2012,在使用DISTINCT的两个查询中使用UNIONUNION有什么区别?即在选择查询中使用Union和Union与DISTINCT有什么区别?

SELECT Columns FROM A 
UNION 
SELECT Columns FROM B 

SELECT DISTINCT Columns FROM A 
UNION 
SELECT DISTINCT Columns FROM B 

是什么上面查询之间的区别?

+0

您是否注意到了区别?后者删除重复两次(如果它没有优化)。 – 2014-10-20 06:45:43

+0

Distinct从单个结果集中删除重复项,但是当您使用UNION添加两个不同的结果集时,它将从最终结果集中删除重复项。可能会有一些性能问题。 – 2014-10-20 06:48:05

+0

@TimSchmelter实际上我几乎没有看到任何区别,但我有选择使用DISTINCT和与功能连接的功能。我正在寻找性能和调优的观点。 – 2014-10-20 06:48:20

回答

1

结果没有区别,因为UNION消除了重复。

FYI UNION ALL按选定的顺序保留所有行(如简单的附加)。

向UNION的每个(或两个)端添加DISTINCT可能会比较慢,因为它引入了一个毫无意义的步骤(尽管任何优化器都会认可这一点并消除重复的工作)。

+0

所以我可以得出结论使用DISTINCT WITH UNION可能会导致性能下降。我们有任何链接,我可以深入探讨这个主题。 – 2014-10-20 06:52:38

+1

我只是试试看而已。这是获得有关性能的最佳方法。使用不同可能会更快取决于你在做什么,例如,如果使用仅索引扫描,你可能发现不同可以比联合更快地消除大量重复。它取决于表大小,结果行集大小,where子句和索引的存在。就像我说的那样 - 用实际数据和真正的where子句在真实表格上试用它。 – Bohemian 2014-10-20 06:58:17

+0

完全同意。 – 2014-10-20 07:00:19