{channel.title!channel.name} - 楚淮公司周东林

oracle删除大量数据方法

今天需要将数据库里面的一批老数据删除,数据量比较大。百度上搜索了几种方法,效率都不太高,后老换个思路,效率快多了。


先说几种不太好的方法。

方法一:

delete from yw_xfj where lsjbz='1' and   rownum < 10000;

删除前9999条记录,速度还可以几秒钟。但是几百万条也挺伤人的,这种可以写个循环,感觉不适合我这种懒人。

方法二:

delete TOP(5000)  from yw_xfj where lsjbz='1';

这种方法 ORACLE 不支持。

换个思路,想快用 delete 肯定不行的,关闭日志也快不起来。因为delete from记录是一条条删的,所删除的每行记录都会进日志。可以尝试 truncate 整页删除,这种方法还行,貌似不能用 where 子句。

最快捷,省事的方法:

1.用 create table tempTable as select * from yw_xfj where lsjbz='1' ; 将需要的数据新建一张临时表。

2.drop table yw_xfj;

3.将 tempTable 改成 yw_xfj 。

 

 


浏览.发表于:2018-04-13 15:55:00