表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秒,適合大資料量的情況,產生更少回滾量;
Oracle刪除重覆記錄
oracle刪除重覆記錄的最好的方法 delete from emp e where e.rowid select min y.rowid from emp y where y.empno e.empno 1 子查詢找出某員工最低的rowid 肯定只有乙個 其它大於這條記錄rowid的,全部刪除。2...
如何刪除表中重覆記錄?
最近專案中遇到了乙個需求,即 如何刪除表中重覆記錄,使得所有重複的記錄都只保留一行?在google了半個小時之後,發現居然沒有乙個是正常可用的,於是乎只好自己動手寫了乙個。因為即便是grails提供了很好的gorm,但是使用sql仍然不可能完全避免,因此把它共享出來,也符合咱們 的 共享開發經驗 的...
快速刪除ORACLE重覆記錄
在oracle中,可以通過唯一rowid實現刪除重覆記錄 還可以建臨時表來實現.這個只提到其中的幾種簡單實用的方法,希望可以和大家分享 以表employee為例 sql desc employee name null?type emp id number 10 emp name varchar2 2...