ORACLE刪除重複資料的一種高效的方法

2021-06-05 04:25:50 字數 877 閱讀 7161

刪除重複資料的一種高效的方法

表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中,有個隱藏了自動rowid,裡面給每條記錄乙個唯一的rowid,我們如果想保留最新的一條記錄,我們就可以利用這個字段,保留重複資料中rowid最大的一條記錄就可以了。下面是查詢重複資料的乙個例子 select a.rowid,a.from 表名 a where a.rowid sel...

ORACLE刪除重複資料

我們可能會出現這種情況,某個表原來設計不周全,導致表裡面的資料資料重複,那麼,如何對重複的資料進行刪除呢?重複的資料可能有這樣兩種情況,第一種時表中只有某些字段一樣,第二種是兩行記錄完全一樣。一 對於部分字段重複資料的刪除 先來談談如何查詢重複的資料吧。下面語句可以查詢出那些資料是重複的 selec...

oracle 複製資料 刪除重複資料

最簡單的複製 insert into a kcdm,zklb,kksj i select kcdm,zklb,kksj i from b 產生疑惑的地方 如果a有乙個自增的id,語句該怎麼寫?開始想法 insert into a id,kcdm,zklb,kksj i select seq a id...