表demo是重复拷贝自dba_objects,有88万左右,不重复的是27323,没有索引
方法一:delete from demo a where a.rowid <> (select max(rowid) from demo b where
b.object_id=a.object_id);
耗时:几个小时以上
方法二: delete from demo where rowid in
(select rid from
(select rowid rid,row_number() over(partition by object_id order by rowid) rn
from demo)
where rn <> 1 );
耗时:30秒
方法三: create table demo2 as
select object_id,owner... from
(select demo.*,row_number() over(partition by object_id order by rowid) rn from demo)
where rn = 1;
truncate table demo; insert into demo select * from demo2; drop table demo2;
共耗时: 10秒,适合大数据量的情况,产生更少回滚量;
本文介绍了三种在数据库中高效删除重复记录的方法。方法一对比了使用ROWID进行操作的两种方式,耗时从几小时到30秒不等;方法三通过创建临时表并利用ROW_NUMBER()函数实现,总耗时仅10秒,适用于大数据量场景。
2013

被折叠的 条评论
为什么被折叠?



