我有两个查询,UNION
我已经知道这两个查询之间不会有重复的元素。因此,UNION
和UNION ALL
会产生相同的结果。
我应该使用哪一个?
您应该使用与您正在寻找的意图相匹配的那个。如果要确保没有重复使用UNION
,否则使用UNION ALL
. 仅仅因为您的数据现在会产生相同的结果并不意味着它总是会产生相同的结果。
也就是说,UNION ALL
在任何健全的数据库实现上都会更快,请参阅下面的文章以获取示例。但通常情况下,它们是相同的,只是UNION
执行了一个额外的步骤来删除相同的行(正如人们可能期望的那样),并且它可能倾向于支配执行时间。
我看到你已经标记了这个问题性能,所以我认为这是你的主要考虑因素。
UNION ALL
将绝对优于UNION
SQL 不必检查这两组重复。
除非您需要 SQL 为您执行重复检查,否则请始终使用UNION ALL
.
UNION ALL
反正我会用。即使您知道不会有重复,但取决于您的数据库服务器引擎,它可能不知道这一点。
因此,只是为了向数据库服务器提供额外的信息,以便其查询计划器(可能)有更好的选择,请使用UNION ALL
.
话虽如此,如果您的DB server的查询计划器足够聪明,可以从UNION
子句和表索引中推断出该信息,那么结果(性能和语义方面)应该是相同的。
无论哪种情况,它都很大程度上取决于您使用的数据库服务器。
根据http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-union-all-which-is-better-for-performance/至少对于性能来说最好使用 UNION ALL,因为它不会主动区分重复项,因此速度更快
由于两者不会重复,因此使用 UNION ALL。您无需检查重复项,UNION ALL 将更有效地执行任务。