使用SQL Server 2012,在使用DISTINCT
的两个查询中使用UNION
和UNION
有什么区别?即在选择查询中使用Union和Union与DISTINCT有什么区别?
SELECT Columns FROM A
UNION
SELECT Columns FROM B
与
SELECT DISTINCT Columns FROM A
UNION
SELECT DISTINCT Columns FROM B
是什么上面查询之间的区别?
使用SQL Server 2012,在使用DISTINCT
的两个查询中使用UNION
和UNION
有什么区别?即在选择查询中使用Union和Union与DISTINCT有什么区别?
SELECT Columns FROM A
UNION
SELECT Columns FROM B
与
SELECT DISTINCT Columns FROM A
UNION
SELECT DISTINCT Columns FROM B
是什么上面查询之间的区别?
结果没有区别,因为UNION消除了重复。
FYI UNION ALL按选定的顺序保留所有行(如简单的附加)。
向UNION的每个(或两个)端添加DISTINCT可能会比较慢,因为它引入了一个毫无意义的步骤(尽管任何优化器都会认可这一点并消除重复的工作)。
所以我可以得出结论使用DISTINCT WITH UNION可能会导致性能下降。我们有任何链接,我可以深入探讨这个主题。 – 2014-10-20 06:52:38
我只是试试看而已。这是获得有关性能的最佳方法。使用不同可能会更快取决于你在做什么,例如,如果使用仅索引扫描,你可能发现不同可以比联合更快地消除大量重复。它取决于表大小,结果行集大小,where子句和索引的存在。就像我说的那样 - 用实际数据和真正的where子句在真实表格上试用它。 – Bohemian 2014-10-20 06:58:17
完全同意。 – 2014-10-20 07:00:19
我完全同意波希米亚人说什么!!它们之间没有区别。但是如果你想选择重复的记录,你也必须通过用union all取代union来改变查询。
以下是证明: - “What is the difference between UNION and UNION ALL?”
您是否注意到了区别?后者删除重复两次(如果它没有优化)。 – 2014-10-20 06:45:43
Distinct从单个结果集中删除重复项,但是当您使用UNION添加两个不同的结果集时,它将从最终结果集中删除重复项。可能会有一些性能问题。 – 2014-10-20 06:48:05
@TimSchmelter实际上我几乎没有看到任何区别,但我有选择使用DISTINCT和与功能连接的功能。我正在寻找性能和调优的观点。 – 2014-10-20 06:48:20