我有一个有效的代码,
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;
--
Run Code Online (Sandbox Code Playgroud)
我将联盟更改为联合所有,从我所读到的它只要我有一个订单(我这样做)就不会产生很大的不同,是这个真理还是我应该保持它的方式,它仍然有效双向
UNION和UNION ALL之间的选择不是它们中的一个是否有效,或者它们中的一个是否表现更快,而是哪一个对于您想要实现的逻辑是正确的.
UNION ALL只是两个查询组合成单个结果集的结果.您应该将结果集的顺序视为随机,但实际上您可能会发现它是第一个结果集,后面是第二个结果集.
UNION是相同的,但DISTINCT应用于组合集.因此,它可以返回更少的行,花费更长的时间并消耗更多的资源.您可能会发现行的顺序不同,但您应该再次假设顺序是随机的.
将ORDER BY应用于其中任何一个是保证结果集上的顺序的唯一方法.它会影响UNION ALL的性能,但可能不会过多地影响UNION(除了DISTINCT的影响),因为优化器可能会选择一个DISTINCT实现来返回有序的结果集.
因此,在您的情况下,您希望显示两个行(实际上UNION不会消除它们中的任何一个),并且您希望指定顺序 - 所以基于此,UNION ALL和您提供的ORDER BY是正确的方法.