UNION和UNION ALL之间的区别是什么?


当前回答

UNION删除重复项,而UNION ALL不删除重复项。

为了删除重复项,必须对结果集进行排序,这可能会影响UNION的性能,具体取决于要排序的数据量和各种RDBMS参数的设置(对于具有WORKAREA_SIZE_POLICY=AUTO或SORT_AREA_SIZE_SIZE和SOR_AREA_RETAINED_SIZE的Oracle PGA_AGGREGATE_TARGET,如果WORKARE_ASIZE_PPOLICY=MANUAL)。

基本上,如果排序可以在内存中执行,那么排序速度会更快,但关于数据量的警告同样适用。

当然,如果需要返回没有重复的数据,则必须使用UNION,具体取决于数据的来源。

我会在第一篇文章中评论“表现差得多”的评论,但没有足够的声誉(分数)。

其他回答

UNION会删除重复记录,而UNION ALL则不会。但是需要检查要处理的大量数据,并且列和数据类型必须相同。

由于union内部使用“不同”行为来选择行,因此在时间和性能方面成本更高。喜欢

select project_id from t_project
union
select project_id from t_project_contact  

这给了我2020年的记录

另一方面

select project_id from t_project
union all
select project_id from t_project_contact

给我超过17402行

从优先级角度看,两者具有相同的优先级。

联合,联合UNION命令用于从两个表中选择相关信息,非常类似于JOIN命令。但是,在使用UNION命令时,所有选定的列都需要具有相同的数据类型。使用UNION,仅选择不同的值。

联合所有人UNION ALL命令与UNION命令相同,但UNION ALL选择所有值。

Union和Union all的区别在于Union all不会消除重复的行,相反,它只是从所有符合查询细节的表中提取所有行,并将它们组合到一个表中。

UNION语句有效地对结果集执行SELECT DISTINCT。如果您知道从联合返回的所有记录都是唯一的,请改用union all,这样可以更快地获得结果。

UNION和UNION ALL之间的基本区别是联合操作从结果集中消除了重复的行,但联合ALL在合并后返回所有行。

从…起http://zengin.wordpress.com/2007/07/31/union-vs-union-all/

通过运行如下查询,您可以避免重复,并且运行速度仍然比UNION DISTINCT(实际上与UNION相同)快得多:

SELECT*FROM mytable WHERE a=X UNION ALL SELECT*FROM mytable WHERE b=Y AND a=十、

注意AND a=X部分。这比UNION快得多。

UNION将两个结构兼容的表的内容合并为一个组合表。

差异:

UNION和UNION ALL的区别在于UNION将省略重复记录,而UNION ALL将包含重复记录。

联合结果集按升序排序,而联合所有结果集不排序

UNION对其结果集执行DISTINCT,以便消除任何重复的行。而UNION ALL不会删除重复项,因此它比UNION更快*

注意:UNION ALL的性能通常会优于UNION,因为UNION需要服务器执行删除任何重复项的额外工作。因此,如果确定不会有任何重复项,或者有重复项不是问题,出于性能原因,建议使用UNION ALL。