暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

大表数据删除的方法总结

M小小虾米 2021-08-04
2141

首先,我们要清除drop,truncate和delete这三种命令的正确使用方法和使用范围。

对于大表的删除,我们要提前估计出这张表需要删除的数据大小是否会对数据库有压力

法一、如果表删除的数据很小,不会对数据库造成大的负担,且undo空间足够应对delete操作产生的大量日志。则我们只需提前做好表的备份,直接删除即可。


delete from username.tablename where logdat<='20150225';


法二、如果大表中要删除大量数据,只保留小一部分数据。则尽量不适用delete操作,因为delete会产生大量日志。我们可以根据此表创建出一个临时表,从表中将要保留的数据导入到临时表中,然后再将此表truncate后再从临时表中将数据导入即可。


create table temptable as select * from oldtable where logdat >='20150225';


truncate table oldtable;


insert into oldtable select * from temptable;

法三、与法2的方法类似。我们可以将表重命名,然后根据旧表新建一个同名的表,再从重命名后的表中将有用信息插入到新表中


alter table tablename rename to oldtablename;

注意如果表中有索引的话,需要将索引也删除,重建一个新名称的索引名。

drop index username.indexname;

create index username.newindex on username.tablename(logdat);

根据旧表的建表语句创建出新表,(可以从plsql中导出表的建表语句,或者命令导出建表语句)

根据旧表将新表的索引添加进去

insert into tablename select * from oldtablename where logdat >='20150225';



方法很多,不断积累中!

文章转载自M小小虾米,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论