工会或工会是否会产生很大的影响?

时间:2013-09-05 15:39:53

标签: sql oracle

我有一个有效的代码,

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;
 --

我将联盟更改为联合所有,从我所读到的它只要我有一个订单(我这样做)就不会产生很大的差异,这是真的还是应该让它保持原样,它仍然可以双向运作

3 个答案:

答案 0 :(得分:6)

UNION和UNION ALL之间的选择不是它们中的一个是否有效,或者其中一个是否表现更快,而是哪一个对于你想要实现的逻辑是正确的。

UNION ALL只是两个查询合并为单个结果集的结果。你应该认为结果集的顺序是随机的,尽管实际上你可能发现它是第一个结果集,后面是第二个结果集。

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

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

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

答案 1 :(得分:2)

"UNION" = "UNION ALL" + "DISTINCT"

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

答案 2 :(得分:1)

Union All返回所有行,因此您可能会获得重复项。联盟实际上就像一个独特的。在你的情况下,它使用相同的表没有区别!