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

【求解】distinct与group by效率求解
当语句中没有使用聚合函数的时候使用distinct与group by都能达到去除重复的效果
例:
SQL code
--1
select distinct col from tb
--2
select col from tb group by col

这两种情况那个效率会更好点呢?
效率差别大吗?
如果是多列有区别吗?
SQL code
 select distinct col,col2,col3,col4........from tb


------解决方案--------------------
帮顶,学习
------解决方案--------------------
没发言权 

回去研究下 我始终认为是group by的效率高

对于distinct需要慎用

研究结果 回去再贴上
------解决方案--------------------

来听课的!
------解决方案--------------------
从执行计划上看是一样的
------解决方案--------------------
DISTINCT和GROUP BY的区别
------解决方案--------------------
个人觉得如果单是去重效率应该是一样的
------解决方案--------------------
看了 楼上的 连接 还是不慎了解
------解决方案--------------------
做了一个简单的测试,感觉两者效率很接近,不晓得这个测试能不能说明问题
SQL code

------------------------------Version------------------------------------------
--Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
--    Nov 24 2008 13:01:59 
--    Copyright (c) 1988-2005 Microsoft Corporation
--    Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([id] int,[date] datetime)
insert [tb] select rand()*10000,getdate()
go 1000000

select distinct id from tb
/*
(10000 行受影响)
SQL Server 执行时间:
   CPU 时间 = 780 毫秒,占用时间 = 634 毫秒。
*/
select id from tb group by id
/*
(10000 行受影响)
SQL Server 执行时间:
   CPU 时间 = 796 毫秒,占用时间 = 641 毫秒。

*/
--建立聚集索引
create  clustered index idtbID ON tb(id)

select distinct id from tb

/*

(10000 行受影响)
SQL Server 执行时间:
   CPU 时间 = 172 毫秒,占用时间 = 1495 毫秒。

*/
select id from tb group by id

/*
(10000 行受影响)


SQL Server 执行时间:
   CPU 时间 = 172 毫秒,占用时间 = 1489 毫秒。
*/

------解决方案--------------------
帖子不见了
------解决方案--------------------
我是来学习的