SQL Server:多个查询或UNION

时间:2011-02-23 10:08:18

标签: sql-server union

我需要执行16个查询。所有这些查询都具有相同的格式:

SELECT string, number, number 

让我将所有这些数据组合在一起,就像创建一个包含所有结果的仪表板一样。

我的问题是:您认为UNION ALL会比逐个执行所有查询更快吗?

5 个答案:

答案 0 :(得分:4)

Union All Union 更快。

如果是 Union ,如果您有10列和100行,它将比较每个cell.ie(10 * 100)以获取 Union All ,情况并非如此。因此获得分离的成本很多

答案 1 :(得分:4)

UNION ALL当然应该允许您更快地恢复数据。

但是你打算如何处理客户端上的数据呢?如果必须将其拆分为16个独立的数据集,则总体执行时间可能会增加。

无论你做什么,你只需要对数据库进行一次调用,所以如果你把它作为16个单独的查询,那么在一个存储过程(或子存储过程)中调用它们会很好。

答案 2 :(得分:3)

您最好使用存储过程和临时表,并在临时表中插入所有16个查询结果。并从此临时表返回结果。

答案 3 :(得分:1)

如果基础查询导致对对象进行扫描操作,那么该操作只需要为UNION执行一次,但如果不是UNION则每次执行都会执行一次 - 所以,是的,它可能会是更快。

此外,通过单个查询,通信开销和聊天将会少得多,

答案 4 :(得分:1)

将它们全部作为一个查询执行(UNION ALL'd together)将涉及1次往返数据库而不是16次往返 - 因为从.NET代码到SQL的每次往返都会产生开销,然后显然合理化为1从这个角度来看是有益的。

但是还有其他观点,具体取决于具体情况,例如:
- 如果你的查询都非常丰富,那么它可能会变得有点难以维护(对UNIONing大量复杂语句的大量查询)
- 如果单独需要各个查询(即你并不总是希望将它们作为一个结果集的一部分返回),那么你需要将每个查询分成它自己的sproc(不能UNION sprocs)

那么你如何将这些结果组合成一个调用就会发生变化(例如已经建议的临时表方法)。但总的来说,最小化到数据库服务器的往返可以减少时间。问自己的另一面是:是否有其他领域可以调整以提高绩效方面的回报?