要结合或结合所有人,那就是问题

时间:2010-10-11 20:09:04

标签: sql performance union-all

我有两个查询,我UNION在一起,这样我已经知道两个查询之间不会有重复的元素。因此,UNIONUNION ALL会产生相同的结果。

我应该使用哪一个?

5 个答案:

答案 0 :(得分:23)

您应该使用符合您要求的意图的那个。如果您想确保没有重复项,请使用UNION,否则请使用UNION ALL。仅仅因为您的数据会产生相同的结果现在并不意味着它总是会。

也就是说,UNION ALL在任何理智的数据库实现上都会更快,请参阅下面的文章以获取示例。但通常情况下,它们是相同的,除了UNION执行额外的步骤来删除相同的行(正如人们所预期的那样),并且它可能倾向于占据执行时间。

答案 1 :(得分:6)

我看到你已经标记了这个问题的性能,所以我认为这是你的主要考虑因素。

UNION ALL绝对优于UNION,因为SQL不必检查这两个副本集。

除非您需要SQL来为您执行重复检查,否则请始终使用UNION ALL

答案 2 :(得分:2)

根据http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-union-all-which-is-better-for-performance/至少对于性能而言,最好使用UNION ALL,因为它不会主动区分重复项,因此更快

答案 3 :(得分:1)

无论如何我会使用UNION ALL。即使知道不会有重复项,但根据您的数据库服务器引擎,它可能不知道。

因此,只是为了向DB服务器提供额外的信息,为了使其查询计划器成为更好的选择(可能),请使用UNION ALL

话虽如此,如果您的数据库服务器的查询规划器足够聪明,可以从UNION子句和表索引推断出该信息,那么结果(性能和语义方面)应该是一样的。

这两种情况都非常依赖于您正在使用的数据库服务器

答案 4 :(得分:1)

由于两者不会重复使用UNION ALL。您不需要检查重复项,UNION ALL将更有效地执行任务。