我有两个疑问 UNION在一起,这样我就已经知道两个查询之间不会有重复的元素。所以, UNIONUNION 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服务器 您正在使用。

由于两者都不会使用联盟。您无需检查重复项,工会全部将更有效地完成任务。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top