【发布时间】:2025-12-08 11:15:01
【问题描述】:
在 SQL 2008 中,我有这样的查询:
QUERY A
UNION
QUERY B
UNION
QUERY C
它会比将所有 3 个查询的结果放入一个临时表中然后用DISTINCTSELECTing 他们更慢/更快吗?
【问题讨论】:
标签: sql performance sql-server-2008
在 SQL 2008 中,我有这样的查询:
QUERY A
UNION
QUERY B
UNION
QUERY C
它会比将所有 3 个查询的结果放入一个临时表中然后用DISTINCTSELECTing 他们更慢/更快吗?
【问题讨论】:
标签: sql performance sql-server-2008
这取决于查询 - 在不知道查询 A、B 或 C 的复杂性的情况下,它不是可以回答的,因此最好的办法是进行分析,然后据此进行判断。
但是…… 无论如何,我可能会选择联合:临时表可能非常昂贵,尤其是当它变大时。请记住,使用临时表,您正在显式创建额外的操作,因此需要更多的 i/o 来对磁盘子系统施加压力。如果您可以在不使用临时表的情况下进行选择,那总是(可能)会更快。
这个规则肯定有一个例外(或七个),因此您最好针对一个实际的大型数据集进行分析,以确保您获得一些可靠的数据来做出合适的决定。
【讨论】:
DISTINCT 和 UNION 代表完全不同的任务。第一个消除,而第二个加入结果集。我不知道你想做什么,但似乎你想要来自 3 个不同查询的不同行并结合结果。在这种情况下:
query A UNION query B......
这将是最快的,当然取决于你想做什么。
【讨论】:
UNION 都粘贴了两个结果集并消除了重复的行。但是,UNION ALL 只会将两个结果集粘贴在一起,不会进行任何消除。所以DISTINCT 只做一件事;消除。