日期:2014-05-18  浏览次数:20558 次

请教关于UNION和UNION ALL的使用与效率问题
对于这两个的区别,目前我知道的只有:UNION去除重复行,UNION ALL不去除重复行。
在微软的文档上只看到这样的说法,至于效率以及使用上并没有找到相应的文档。
在网上找了一下相关的资料,有的文章说UNION ALL效率更高,因为UNION会进行排序,有的文章说UNION效率高,我实际测试的一个语句中,UNION效率确实比UNION ALL效率高很多,使用UNION的消耗是106左右,而使用UNION ALL则达到了4050左右。
不知道有没有关于这两个之间的区别、使用、效率等方面比较详细的说法呢?

------解决方案--------------------
帮顶!关注!!!(个人感觉Union ALL效率高些吧,毕竟他不需要排除重复的记录!!!也不能概论吧!哈哈)
------解决方案--------------------
具体情况具体分析。不知道你的UNION ALL语句是什么样子的。
------解决方案--------------------
不知道你是怎么测试的

1、工鞥不一样,返回的结果都可能不一样,有啥好比较的
2、就算你两个select 不会重复,union 也比union all 多了一个合并的操作
当然要慢了
------解决方案--------------------
个人感受在多表时Union All 比Union快,但是单表时Union 则快
------解决方案--------------------
这应该分区视图玩法,不过楼主写的有问题,

可以考虑吧把CementTest32 ,JGJ70_90_32,JGJT70_2009_32,JGJT98_2010_32 写成一个视图v

再写语句:
Select ... ...
FROM dbo.CementTest31 AS C
INNER JOIN dbo.TableRecord AS R ON R.TableID = 35331
AND C.SelfID = R.RecordID
AND ( ISNULL(R.IsDel, 0) <> 1 )
INNER JOIN dbo.CementTest31S AS S ON C.SelfID = S.JoinID
AND C.SelNo = S.ToneNo
Left Outer Join [视图v] As T On t.SelfID=R. ...
Left Outer Join [视图v] As E On t.SelfID=R. ...

根据执行计划来判断效率慢的位置,如何效率慢问题出现在[视图v]上,可以考虑对做成静态视图。