工作中遇到这样一个问题,删除(delete)某张表的数据时,发现很慢。使用的数据库是oracle。差不多两分钟删除了10条。
分析了一下,主要是一下问题引起的。
1删除时有子查询
2有索引
3外键约束
在不能truncate的情况下怎么删除比较快呢?
1优化查询条件
2每删除一定数据进行提交,commit。
3删除索引,把数据删除后重建。
4禁用约束,数据删除后再打开。约束的影响是非常大的,因为每一条删除都要去相关表中做判断。这次删除中遇到的这个问题主要就是约束引起的,瓶颈就在这里。
禁用约束的执行语句如下:
alter table 'table name' disable constraint 'constraint name';
启用约束的语句如下:
alter table 'table name' enable constraint 'constraint name';