UNION VS性能

问题描述:

DISTINCT在SQL 2008,我有一个查询,像这样:UNION VS性能

QUERY A 
UNION 
QUERY B 
UNION 
QUERY C 

会不会是慢/不是把结果全部3个查询中说,一个临时表和更快然后SELECT荷兰国际集团他们与DISTINCT

它取决于查询 - 不知道查询A,B或C的复杂程度,它不是一个可以回答的问题,所以你最好的选择是配置文件,然后根据它进行判断。

但是... 我可能会与工会一起工作,无论如何:临时表可能相当昂贵,尤其是当它变大时。记住一个临时表,你明确地创建额外的操作,因此更多的I/O来强调磁盘子系统。如果你可以在不使用临时表的情况下进行选择,那总是(可能)会更快。

这条规则肯定会有一个例外(或七条),因此您最好对实际大数据集进行分析以确保获得一些可靠的数据以作出适当的决定。

DISTINCT和UNION代表完全不同的任务。第一个消除,而第二个加入结果集。我不知道你想要做什么,但似乎你想从3个不同的查询中加入不同的行并加入结果。在这种情况下:

query A UNION query B...... 

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

+9

据我所知UNION自动在内部执行DISTINCT .. UNION ALL,不会将DISTINCT应用于结果集。 – 2010-10-04 08:28:17

+0

事实上,一个'UNION'都粘贴两个结果集并消除重复的行。然而'UNION ALL'只将两个结果集粘贴在一起,并没有做任何消除。所以'DISTINCT'只做一件事;淘汰。 – Kezzer 2010-10-04 08:48:41

+0

感谢您的信息。我用它们很少提出这个问题。但基本上UNION就像SELECT DISTINCT * FROM(... UNION ALL ...)。我会纠正我的答案。 – AlexanderMP 2010-10-04 08:53:34