【求解】distinct与group by效率求解

仙道彰 2010-03-31 01:35:51
当语句中没有使用聚合函数的时候使用distinct与group by都能达到去除重复的效果
例:
--1
select distinct col from tb
--2
select col from tb group by col

这两种情况那个效率会更好点呢?
效率差别大吗?
如果是多列有区别吗?
 select distinct col,col2,col3,col4........from tb
...全文
4276 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
佛不問蒼生 2012-04-03
  • 打赏
  • 举报
回复
單列選擇還可以,多列選擇就不能用DISTINCT了..得Group By.
lflljt 2012-04-01
  • 打赏
  • 举报
回复
--study
dovei 2011-11-23
  • 打赏
  • 举报
回复
学习
支持#2...弱弱的问声.研究有结果不?
仙道彰 2010-04-01
  • 打赏
  • 举报
回复
huangheguyun 2010-04-01
  • 打赏
  • 举报
回复
select distinct col from tb
这个能快点。
sql_sf 2010-04-01
  • 打赏
  • 举报
回复
我是来学习的
w1368042276 2010-03-31
  • 打赏
  • 举报
回复
group by 是用来分组的,不建议用来去除重复行,
distinct 用来去除重复行,不能分组
黄_瓜 2010-03-31
  • 打赏
  • 举报
回复
帖子不见了
黄_瓜 2010-03-31
  • 打赏
  • 举报
回复
做了一个简单的测试,感觉两者效率很接近,不晓得这个测试能不能说明问题

------------------------------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 毫秒。
*/
行者_ 2010-03-31
  • 打赏
  • 举报
回复
看了 楼上的 连接 还是不慎了解
东那个升 2010-03-31
  • 打赏
  • 举报
回复
个人觉得如果单是去重效率应该是一样的
htl258_Tony 2010-03-31
  • 打赏
  • 举报
回复
永生天地 2010-03-31
  • 打赏
  • 举报
回复
从执行计划上看是一样的
SoftwKLC 2010-03-31
  • 打赏
  • 举报
回复

来听课的!
--小F-- 2010-03-31
  • 打赏
  • 举报
回复
没发言权

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

对于distinct需要慎用

研究结果 回去再贴上
guguda2008 2010-03-31
  • 打赏
  • 举报
回复
帮顶,学习
1. 解开用户 1 2. 取得系统当前时间 1 3. 任何含有空值的表达式计算结果都是空值和字符串拼接 1 4. distinct:select distinct deptno,job from emp; distinct是指deptno与job组合的唯一 2 5. 指定转义字符 2 6. order by 2 7. lower函数 2 8. subsr函数 2 9. chr、ascii函数将编码转换为字符或将字符转换为ASCII码 2 10. round四舍五入函数 2 11. to_char函数将日期或数字串转换为固定的格式 2 12. to_date函数将字符串转换为指定的日期格式 2 13. to_number函数 2 14. group by 2 15. 建表create 2 16. 修改表结构alter 3 17. 查看相关表、视图、字典、约束、索引等 3 18. 事务概念 4 19. 范式 4 20. pl_sql 4 1)需要在控制台打印数据的时候必须先执行:set serveroutput on; 4 2)简单例子: 4 3)打印乘法表 4 4)打印星号三角形 4 5)根据雇员工资分级显示税金。 4 6)使用CASE结构实现职务转换。 4 7)求:12+32+52+...+152 的值 4 8)输出一个空心三角形。 4 9)使用二重循环求1!+2!+...+10!的值。 4 21. 连表查询操作(员工-部门-薪水) 4 1) 表结构 4 2) 求部门中那些人的薪水最高 4 3) 求部门平均薪水的等级 5 4) 求部门平均的薪水等级 5 5) 雇员中有哪些人是经理 5 6) 不准用组函数,求薪水最高值 5 7) 求平均薪水最高的部门的部门编号 5 8) 求平均薪水最高的部门的部门名称 5 ①不建视图 5 ②使用视图 5 9) 求部门经理人中平均薪水最低的部门名称 6 10)求比普通员工最高薪水还要高的经理人名称 6 11)求薪水最高的前5名雇员 6

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧