【发布时间】:2012-09-05 04:48:28
【问题描述】:
我知道 UNION ALL 应该比 UNION 有更好的性能(参见:performance of union versus union all)。
现在,我有这个巨大的存储过程(有很多查询),其中最终结果是两个部分的 SELECT,它们之间有一个 UNION。由于两个数据集彼此都是陌生的,我可以使用 UNION ALL 假设更好(没有不同的操作)。
我已经在几个数据库上检查过它,它运行良好。问题是我的一个客户给了我他的数据库进行性能调整,当我调查它时,我注意到如果我将 UNION ALL 更改为 UNION,性能会好一点(!)。这就是我在存储过程中所做的所有更改。
谁能解释一下这种情况是怎么发生的???
谢谢,
齐夫
更新:
附加两个查询的执行计划(差异部分):
【问题讨论】:
-
两种情况的执行计划都检查了吗?
-
@AndrásOttó 如何检索存储过程的执行计划?
-
@DorCohen:在 Management Studio 中运行 PRC,您可以获得图形执行计划(有一些图标可以执行此操作),更多信息您可以查看:msdn.microsoft.com/en-us/library/ms178071(v=sql.105).aspx跨度>
-
@AndrásOttó 我附上了两个查询的执行计划之间的差异
-
你为什么说这样更好,如果你附上的图片中cpu cost和其他东西的信息完全一样?
标签: sql sql-server-2008 sql-server-2008-r2 database-performance query-tuning