查看: 2273|回复: 7

寻求最优化的删除大表重复记录!

[复制链接]
论坛徽章:
4
2010新春纪念徽章
日期:2010-03-01 11:07:22ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:50:44
发表于 2010-12-12 14:50 | 显示全部楼层 |阅读模式
数据库版本是10.2.0.4,有一张表1亿2千万记录

例如:

id    name    type
1     aaa       1
2     aaa       2

id是主键,name有索引,type是位图索引,只有1和2两个值,需要删除一条记录,保留type为1的记录

select id, name, type
  from a
where type != (select min(type) from a b where a.name = b.name);

感觉非常慢,请问各位有没有什么好的方法?多谢了
招聘 : 系统架构师
认证徽章
论坛徽章:
369
秀才
日期:2015-08-10 09:03:20巨蟹座
日期:2015-09-09 14:25:25巨蟹座
日期:2015-09-10 09:03:46秀才
日期:2015-09-11 10:43:06摩羯座
日期:2015-09-20 17:10:27秀才
日期:2015-09-21 09:46:16秀才
日期:2015-09-21 11:16:42秀才
日期:2015-10-08 17:57:58天枰座
日期:2015-10-28 18:28:29秀才
日期:2015-09-06 10:42:32
发表于 2010-12-12 15:09 | 显示全部楼层
ctas

使用道具 举报

回复
论坛徽章:
4
2010新春纪念徽章
日期:2010-03-01 11:07:22ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:50:44
 楼主| 发表于 2010-12-12 16:45 | 显示全部楼层
原帖由 yanggq 于 2010-12-12 15:09 发表
ctas


能否举个例子,谢了

使用道具 举报

回复
论坛徽章:
4
2010新春纪念徽章
日期:2010-03-01 11:07:22ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:50:44
 楼主| 发表于 2010-12-12 16:48 | 显示全部楼层
create table as select 有1亿多条记录,会产生大量日志和表空间的

使用道具 举报

回复
认证徽章
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
发表于 2010-12-12 16:59 | 显示全部楼层
用分析函数

delete  A
where row_id in (

select rid   from (  select rowid as  rid , row_number() over (partition by name order by id) as rn from A )  a where rn>1)


大部分时候,上面这句话的效率最高。

使用道具 举报

回复
论坛徽章:
4
2010新春纪念徽章
日期:2010-03-01 11:07:22ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:50:44
 楼主| 发表于 2010-12-12 17:11 | 显示全部楼层
原帖由 qingyun 于 2010-12-12 16:59 发表
用分析函数

delete  A
where row_id in (

select rid   from (  select rowid as  rid , row_number() over (partition by name order by id) as rn from A )  a where rn>1)


大部分时候,上面这句话的效率最高。



删除的时候还是有条件的,如果删除的时候要保留type=1,删除=2的记录

使用道具 举报

回复
认证徽章
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
发表于 2010-12-12 17:51 | 显示全部楼层
delete  A
where row_id in (

select rid   from (  select rowid as  rid , row_number() over (partition by name order by type) as rn from A )  a where rn>1)

使用道具 举报

回复
论坛徽章:
29
2010广州亚运会纪念徽章:藤球
日期:2010-11-22 15:43:49宝马
日期:2013-12-23 16:57:41马上加薪
日期:2014-03-10 14:33:48优秀写手
日期:2014-06-19 06:00:10itpub13周年纪念徽章
日期:2014-09-30 16:16:02马上有对象
日期:2014-10-13 08:46:52马上有对象
日期:2015-01-04 09:47:18喜羊羊
日期:2015-03-04 14:52:462015年新春福章
日期:2015-03-06 11:58:18沸羊羊
日期:2015-03-24 14:30:07
发表于 2010-12-12 20:30 | 显示全部楼层
加些并行提示一部分一部分的删吧,小批量、多批次。

使用道具 举报

回复

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

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

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