今天google分析函數row_number()的時候發現的,覺得很好:
表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秒,適合大數據量的情況,產生更少回滾量;
學到了分析函數row_number(),對于object_id和rowid也有了一些認識。oracle要學的東西太多了,什么時候是個頭啊
。上面的方法不是很難理解,但也還沒有完全理解,有機會實際試試。