SQLServer的UNION比UNION ALL具有更好的性能?

5 sql sql-server-2008 sql-server-2008-r2 database-performance query-tuning

我知道UNION ALL应该比UNION具有更好的性能(参见:联盟与联盟的表现).

现在,我有这个庞大的存储过程(有很多查询),其中最后的结果是两部分SELECT,它们之间有一个UNION.由于两个数据集彼此都是外来的,我可以使用UNION ALL,它假设更好(没有明显的操作).

我在几个数据库上检查它,它工作正常.问题是我的一个客户给我他的数据库进行性能调整,当我调查它时,我注意到如果我将UNION ALL更改为UNION,性能会更好(!).这是我在存储过程中所做的所有改变.

有人可以解释一下这种情况会怎样?

谢谢,
Ziv

更新:
两个查询的附加执行计划(差异部分): 在此输入图像描述

Moo*_*ght 0

如果您有一些重复的行,则可能会发生这种情况。UNION 语句有效地对结果集执行 SELECT DISTINCT。如果您知道联合返回的所有记录都是唯一的,请使用 UNION ALL,因为它可以提供更快的结果。但是,对于您的情况中的重复项,我猜测有足够数量的重复项以使 UNION 更快 - 您可以测试此计算重复项并删除它们。然后运行 ​​UNION ALL 可能会重新成为“赢家”......

我希望这有帮助。