楼主: jinaqu

[PL/SQL] 大家认为什么样的方式去重效率最高?GROUP BY ? DISTINCT? EXISTS? UNION?

[复制链接]
论坛徽章:
20
ITPUB社区千里马徽章
日期:2013-06-09 10:15:34生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45生肖徽章:狗
日期:2013-12-06 14:15:45生肖徽章:猪
日期:2013-12-06 14:15:45SQL极客
日期:2013-12-09 14:13:35优秀写手
日期:2013-12-18 09:29:13青年奥林匹克运动会-羽毛球
日期:2014-09-23 15:12:43暖羊羊
日期:2015-03-04 14:54:57生肖徽章:羊
日期:2013-12-06 14:15:45
11#
发表于 2015-2-6 17:01 | 只看该作者
原来用group by比较多;现在开始尝试表的自连接配合rowid使用

使用道具 举报

回复
论坛徽章:
6
2014年世界杯参赛球队: 阿尔及利亚
日期:2014-07-24 11:05:12马上有钱
日期:2014-10-17 22:07:27复活蛋
日期:2014-12-01 15:10:24红孩儿
日期:2015-01-09 11:05:202015年新春福章
日期:2015-03-04 14:55:132015年新春福章
日期:2015-03-06 11:59:47
12#
发表于 2015-2-7 11:14 | 只看该作者
常用disintc。因为经常用表连接操作,如果用group by 代码太臃肿了。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
13#
发表于 2015-2-8 08:55 | 只看该作者
dingjun123 发表于 2015-2-6 15:33
group by和distinct一样的。。。喜欢肯定是distinct

distinct有hash吗

使用道具 举报

回复
论坛徽章:
3
优秀写手
日期:2014-11-11 06:00:15沸羊羊
日期:2015-03-04 14:55:412015年新春福章
日期:2015-03-06 11:59:47
14#
 楼主| 发表于 2015-2-10 10:52 | 只看该作者
从自身出发,我最关注的效率和性能

使用道具 举报

回复
论坛徽章:
4
优秀写手
日期:2014-08-15 06:00:132015年新春福章
日期:2015-03-04 14:55:132015年新春福章
日期:2015-03-06 11:59:47慢羊羊
日期:2015-04-08 13:42:29
15#
发表于 2015-2-10 13:04 | 只看该作者
我现在用的比较多的是分析函数+rowid

使用道具 举报

回复
论坛徽章:
3
ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
16#
发表于 2015-2-12 10:26 | 只看该作者
学习ing

使用道具 举报

回复
论坛徽章:
2
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47
17#
发表于 2015-2-12 12:31 | 只看该作者
同12楼,一般查询的时候都是好些个标关联查询,习惯用distinct

使用道具 举报

回复
论坛徽章:
4
咸鸭蛋
日期:2013-02-26 17:34:10双黄蛋
日期:2013-06-01 23:58:262015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39
18#
发表于 2015-2-16 09:38 | 只看该作者
AskTom这篇文章可能对你有用:

https://asktom.oracle.com/pls/as ... ON_ID:4274289639999

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
19#
发表于 2015-2-19 23:12 | 只看该作者
younghuijun 发表于 2015-2-16 09:38
AskTom这篇文章可能对你有用:

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID: ...

tom的办法,出错的时候,exceptions表自动被填充?
how about adding a unique constraint on the columns in question and using "exceptions
into".  For example:

ops$tkyte@ORA817DEV.US.ORACLE.COM> create table t ( a int, b int, c int );

Table created.

ops$tkyte@ORA817DEV.US.ORACLE.COM> exec gen_data( 'T', 500 );

PL/SQL procedure successfully completed.

ops$tkyte@ORA817DEV.US.ORACLE.COM> insert into t select * from t where rownum < 10;

9 rows created.

ops$tkyte@ORA817DEV.US.ORACLE.COM>
ops$tkyte@ORA817DEV.US.ORACLE.COM> create table exceptions(row_id rowid,
  2                          owner varchar2(30),
  3                          table_name varchar2(30),
  4                          constraint varchar2(30));

Table created.

ops$tkyte@ORA817DEV.US.ORACLE.COM>
ops$tkyte@ORA817DEV.US.ORACLE.COM> alter table t add constraint t_unique unique(a,b,c)
exceptions into exceptions;
alter table t add constraint t_unique unique(a,b,c) exceptions into exceptions
                             *
ERROR at line 1:
ORA-02299: cannot validate (OPS$TKYTE.T_UNIQUE) - duplicate keys found


ops$tkyte@ORA817DEV.US.ORACLE.COM>
ops$tkyte@ORA817DEV.US.ORACLE.COM> create table dups
  2  as
  3  select *
  4    from t
  5   where rowid in ( select row_id from exceptions )
  6  /
create table dups
             *
ERROR at line 1:
ORA-00955: name is already used by an existing object


ops$tkyte@ORA817DEV.US.ORACLE.COM> delete from t where rowid in ( select row_id from
exceptions );

18 rows deleted.

ops$tkyte@ORA817DEV.US.ORACLE.COM> insert into t select distinct * from dups;

9 rows created.

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2015-3-5 13:42 | 只看该作者
来学习的ing

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表