gpt4 book ai didi

SQLServer 的 UNION 性能比 UNION ALL 好?

转载 作者:行者123 更新时间:2023-12-04 13:45:05 24 4
gpt4 key购买 nike

我知道 UNION ALL 应该比 UNION 有更好的性能(参见: performance of union versus union all )。

现在,我有这个巨大的存储过程(有很多查询),其中最终结果是一个两部分的 SELECT,它们之间有一个 UNION。由于这两个数据集对彼此来说都是陌生的,我可以使用 UNION ALL ,它应该更好(没有不同的操作)。

我已经在几个数据库上检查过它并且运行良好。问题是我的一个客户给了我他的数据库进行性能调整,当我调查它时,我注意到如果我将 UNION ALL 更改为 UNION,性能会好一点(!)。这是我在存储过程中所做的所有更改。

有人可以解释一下这种情况是如何发生的吗???

谢谢,
齐夫

更新:
附加两个查询的执行计划(差异部分):
enter image description here

最佳答案

您引用了指向此 article 的其他主题.

如果你在这里检查这个是两个不同的执行计划。最大的区别是Distinct Sort这使得性能更差。

在您的示例中,两个执行计划与物理操作 Merge Join 具有相同的步骤(只有逻辑操作不同)。甚至估计都是一样的。

现在我真的很酷:这两个查询之间的差异有多大?

如果您没有执行以下操作,请再次重复您的测试:
1)在运行PRC之前使用以下行:

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

这使缓存清晰,您可以在两种情况下进行“冷运行”。您可以查看其他 article这里也。

2) 重复运行几次以查看平均值。

差别还存在吗?

关于SQLServer 的 UNION 性能比 UNION ALL 好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12383549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com