UNION和UNION ALL有什么区别?
UNION
和UNION ALL
什么区别?
UNION
删除重复的记录(结果中的所有列都相同), UNION ALL
不会。
使用UNION
代替UNION ALL
时性能会受到影响,因为数据库服务器必须执行额外的工作才能删除重复的行,但通常您不需要重复项(尤其是在开发报表时)。
UNION示例:
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
结果:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
UNION ALL示例:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
结果:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
UNION和UNION ALL都连接了两个不同SQL的结果。 他们在处理重复的方式上有所不同。
UNION对结果集执行DISTINCT,消除任何重复的行。
UNION ALL不会删除重复项,因此它比UNION更快。
注意:使用此命令时,所有选定的列需要具有相同的数据类型。
示例:如果我们有两个表,1)Employee和2)Customer
UNION
删除重复项,而UNION ALL
则不删除重复项。
为了删除重复项,必须对结果集进行排序,这可能会影响UNION的性能,具体取决于要排序的数据量以及各种RDBMS参数的设置(对于使用WORKAREA_SIZE_POLICY=AUTO
Oracle PGA_AGGREGATE_TARGET
或SORT_AREA_SIZE
和SOR_AREA_RETAINED_SIZE
如果WORKAREA_SIZE_POLICY=MANUAL
)。
基本上,如果它可以在内存中执行,那么排序会更快,但同样适用于数据量的警告。
当然,如果你需要返回没有重复的数据,那么你必须使用UNION,这取决于你的数据来源。
我会评论第一篇文章,以评论“性能低得多”的评论,但没有足够的声望(点数)来这样做。
链接地址: http://www.djcxy.com/p/41867.html