SQL Server中UNION与UNION ALL的性能比较

5hcedyr0  于 2022-12-26  发布在  SQL Server
关注(0)|答案(6)|浏览(361)

我必须在几个表中运行SELECT语句。我确信这些表返回不同的记录。我反正使用UNION ALL。
当我确信表返回不同的记录时,从性能方面来看,使用UNION或UNION ALL哪个更好?

imzjd6km

imzjd6km1#

当您不关心消除重复记录时,UNION ALL的性能优于UNION,因为您避免了开销较大的distinct sort操作。请参阅:SQL SERVER – Difference Between Union vs. Union All – Optimal Performance Comparison

6tdlim6h

6tdlim6h2#

UNION ALL总是较快,因为UNION排除重复的条目

f0brbegy

f0brbegy3#

UNION在内部实现了两个查询。1.SELECT,它将返回一个数据集2.DISTINCT。任何研究过数据库内部的人都可以很容易地理解,就处理而言,DISTINCT子句的开销是非常大的。
如果您非常确定生成的数据集不需要具有唯一的行,那么我们可以跳过UNION而使用UNION ALL
UNION ALL将与UNION相同,不同之处在于它不触发DISTINCT,从而在内部节省了成本高昂的操作

lhcgjxsq

lhcgjxsq4#

当你知道你想要所有的结果行时,不管你是否知道它们是不同的,最好使用UNION ALL。没有“all”的UNION将总是执行“不同的检查”,不管数据实际上是什么。

1qczuiv0

1qczuiv05#

为什么UNION ALL更快?因为UNION必须进行排序以删除重复项。如果不需要删除重复项,则UNION ALL是更好的选择,但UNION有其用途,应在适当的时候使用。

rnmwe5a2

rnmwe5a26#

我想大胆地说,这取决于你的数据。
如果性能是端到端测量的(从客户端发送请求的第一个字节到它收到响应的最后一个字节),那么您有以下两个极端:
1.结果集中的绝大多数(比如1%)包含重复项
1.结果集中的绝大多数(比如99%)都包含重复项
在案例1中,UNION ALL会更快,因为它不需要在返回数据之前对数据进行排序(以删除重复项)。
在第2种情况下,UNION会更快,因为在内存中删除重复项比通过网络发送要快得多。如果结果集包含100万行,其中只有2个唯一值,那么一旦删除了这些重复项,网络时间就会小得多。

相关问题