有一张表tabacc有9000多万条数据,每次delete大约100万条数据,每次delete的时间很长,我用的方法(在存储过程中实现)是--delete /*+ use_hash(a,b) parallel(a,15)*/ from tabacca where exists (select 1 from temptablea b where a.id=b.id and b.type='1');不是分区表,有索引,因执行时间太长,看高手有什么好的办法?请高手指点!

解决方案 »

  1.   

    直接清空表 truncate table tabacc
      

  2.   

    使用EXISTS效率肯定低。
    换成下面的等效语句试一下。delete /*+ use_hash(a,b) parallel(a,15)*/ 
    from tabacca where a.id IN (select ID from temptablea WHERE type='1')
      

  3.   


    最好建议,改成分区表,还有的话,如果删除数据的时候,表不再有更新,修改和查询是话,可以先将表置为NOLOGING,然后删除,即可
      

  4.   

    如何快速删除大批量的数据表(test为数据库表):
    1、delete from test;
      这种做法是人们最长用的,也是效率最低的,花费时间最长的,因为在删除数据的同时,要记录数据库日志;
    2、import from /dev/null of del replace into test;
      这种做法是先清空,在导入数据,由于导入的文件为空,故相当于清空表中的数据,这种删除的速度较快;
    3、alter table test activate not logged initially with empty;
      这种做法是直接删除表中的数据,不记日志,此方法处理最快;