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