- UID
- 60857
- 阅读权限
- 100
- 帖子
- 13807
- 精华贴数
- 26
- 技术排名
- 81
- 技术积分
- 19863
- 社区排名
- 375
- 社区积分
- 6587
- 注册时间
- 2003-10-15
- 精华贴数
- 26
- 技术积分
- 19863
- 社区积分
- 6587
- 注册时间
- 2003-10-15
- 论坛徽章:
- 122
|
发表于 2006-6-21 15:18:02
|显示全部楼层
用分析函数,参考:
[php]
删除重复数据的一种高效的方法
发表人:yaanzy | 发表时间: 2005年二月18日, 13:57
表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秒,适合大数据量的情况,产生更少回滚量;
..
[/php] |
|