在SQL 2008中,我有一个类似的查询:
QUERY A
UNION
QUERY B
UNION
QUERY C
比将所有3个查询的结果放在一个临时表中然后SELECT
用DISTINCT
更快还是更快?
答案 0 :(得分:2)
这取决于查询 - 在不知道查询A,B或C的复杂性的情况下,它不是可以回答的问题,所以最好的办法是分析然后根据它进行判断。
<强>然而... 强> 无论如何,我可能会选择一个联盟:临时表可能非常昂贵,特别是当它变大时。记住一个临时表,你明确地创建了额外的操作,因此更多的i / o来强调磁盘子系统。如果你可以在不使用临时表的情况下进行选择,那么总是(可能)会更快。
这个规则肯定有一个例外(或七个),因此你最好对一个真实大的数据集进行分析,以确保你得到一些可靠的数据来做出合适的决定。
答案 1 :(得分:0)
DISTINCT和UNION代表完全不同的任务。第一个消除,而第二个连接结果集。我不知道你想做什么,但似乎你需要来自3个不同查询的不同行和连接结果。在那种情况下:
query A UNION query B......
这将是最快的,当然取决于你想做什么。