0

我有一个有效的代码,

CURSOR c_val IS
    SELECT 'Percentage' destype,
           1 descode
    FROM dual
    UNION ALL               --16028 change from union to union all for better performance 
    SELECT 'Unit'destype,
           2 descode
    FROM dual
    ORDER  BY descode DESC;
 --

我将联合更改为联合所有,从我所阅读的内容来看,只要我有订单(我这样做),它不会有太大的不同,这是事实还是我应该保持原样,它仍然有效双向

4

3 回答 3

6

UNION 和 UNION ALL 之间的选择不是它们中的一个是否工作,或者它们中的一个是否执行得更快,而是哪一个对于您要实现的逻辑是正确的。

UNION ALL 只是将两个查询的结果组合成一个结果集。您应该认为结果集的顺序是随机的,尽管在实践中您可能会发现它是第一个结果集,然后是第二个结果集。

UNION 是相同的,但将 DISTINCT 应​​用于组合集。因此,它可能返回更少的行并花费更长的时间并消耗更多的资源。您可能会发现行的顺序不同,但您应该再次假设顺序是随机的。

对其中任何一个应用 ORDER BY 是保证结果集顺序的唯一方法。它会影响 UNION ALL 的性能,但可能不会对 UNION 影响太大(除了 DISTINCT 的影响之外),因为优化器可能会选择将返回有序结果集的 DISTINCT 实现。

因此,在您的情况下,您希望两行都出现(实际上 UNION 不会消除其中任何一个),并且您希望指定顺序 - 因此,基于此,您提供的 UNION ALL 和 ORDER BY 是正确的方法。

于 2013-09-05T15:55:52.563 回答
2
"UNION" = "UNION ALL" + "DISTINCT"

因此,基本上通过为UNION ALL您保存重复数据删除操作。在这种情况下,您可能会发现性能提升可以忽略不计,但它在大型数据集上可能很重要。

于 2013-09-05T15:54:28.630 回答
1

Union All 返回所有行,因此您可能会得到重复。联合实际上就像一个独特的。在您的情况下,因为您使用的是相同的表,所以这并没有什么不同!

于 2013-09-05T15:46:47.233 回答