UNION和UNION ALL之间的区别是什么?
当前回答
不确定哪个数据库很重要
UNION和UNION ALL应适用于所有SQL Server。
您应该避免不必要的UNION,它们是巨大的性能泄漏。根据经验,如果您不确定要使用哪个,请使用UNION ALL。
其他回答
不确定哪个数据库很重要
UNION和UNION ALL应适用于所有SQL Server。
您应该避免不必要的UNION,它们是巨大的性能泄漏。根据经验,如果您不确定要使用哪个,请使用UNION ALL。
UNION将两个结构兼容的表的内容合并为一个组合表。
差异:
UNION和UNION ALL的区别在于UNION将省略重复记录,而UNION ALL将包含重复记录。
联合结果集按升序排序,而联合所有结果集不排序
UNION对其结果集执行DISTINCT,以便消除任何重复的行。而UNION ALL不会删除重复项,因此它比UNION更快*
注意:UNION ALL的性能通常会优于UNION,因为UNION需要服务器执行删除任何重复项的额外工作。因此,如果确定不会有任何重复项,或者有重复项不是问题,出于性能原因,建议使用UNION ALL。
UNION-在UNION ALL-生成包括重复项在内的所有记录。
两者都是阻塞运算符,因此我个人更喜欢在任何时候使用JOIN而不是阻塞运算符(UNION、INTERSECT、UNION ALL等)。
为了说明为什么Union操作与Union All相比执行得很差,请执行以下示例。
CREATE TABLE #T1 (data VARCHAR(10))
INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'
CREATE TABLE #T2 (data VARCHAR(10))
INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'
以下是UNION ALL和UNION操作的结果。
UNION语句有效地对结果集执行SELECT DISTINCT。如果您知道从联合返回的所有记录都是唯一的,请改用union all,这样可以更快地获得结果。
使用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 DISTINCT(实际上与UNION相同)快得多:
SELECT*FROM mytable WHERE a=X UNION ALL SELECT*FROM mytable WHERE b=Y AND a=十、
注意AND a=X部分。这比UNION快得多。
推荐文章
- GROUP BY with MAX(DATE)
- 删除id与其他表不匹配的sql行
- 等价的限制和偏移SQL Server?
- 为什么我不能在DELETE语句中使用别名?
- 在SQL Server Management Studio中保存带有标题的结果
- "where 1=1"语句
- 如何选择一个记录和更新它,与一个单一的查询集在Django?
- 多语句表值函数vs内联表值函数
- 如何从Oracle的表中获取列名?
- NOLOCK提示在SELECT语句中的作用
- SQL OVER()子句-它什么时候有用,为什么有用?
- 如果字段在MySQL中为空,则返回0
- 我如何使用ROW_NUMBER()?
- SQL或者TSQL是图灵完备的吗?
- 如何检查表上持有哪些锁