UNION与DISTINCT的表现

时间:2010-10-04 08:19:28

标签: sql performance sql-server-2008

在SQL 2008中,我有一个类似的查询:

QUERY A
UNION 
QUERY B
UNION 
QUERY C

比将所有3个查询的结果放在一个临时表中然后SELECTDISTINCT更快还是更快?

2 个答案:

答案 0 :(得分:2)

这取决于查询 - 在不知道查询A,B或C的复杂性的情况下,它不是可以回答的问题,所以最好的办法是分析然后根据它进行判断。

<强>然而... 无论如何,我可能会选择一个联盟:临时表可能非常昂贵,特别是当它变大时。记住一个临时表,你明确地创建了额外的操作,因此更多的i / o来强调磁盘子系统。如果你可以在不使用临时表的情况下进行选择,那么总是(可能)会更快。

这个规则肯定有一个例外(或七个),因此你最好对一个真实大的数据集进行分析,以确保你得到一些可靠的数据来做出合适的决定。

答案 1 :(得分:0)

DISTINCT和UNION代表完全不同的任务。第一个消除,而第二个连接结果集。我不知道你想做什么,但似乎你需要来自3个不同查询的不同行和连接结果。在那种情况下:

query A UNION query B......

这将是最快的,当然取决于你想做什么。