+ -
当前位置:首页 → 问答吧 → oracle上亿条记录大表delete

oracle上亿条记录大表delete

时间:2011-12-14

来源:互联网

有一张表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');不是分区表,有索引,因执行时间太长,看高手有什么好的办法?请高手指点!

作者: dongxnbz   发布时间: 2011-12-14

是在线库吗

作者: lxpbs8851   发布时间: 2011-12-14

有一张表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');不是分区表,有索引,因执行时间太长,看高手有什么好的办法?请高手指点! 是生产上的数据库

作者: dongxnbz   发布时间: 2011-12-14

SQL code

declare
maxrows number default 1000;
tb_row_id type%tabacca.row_id;
  cursor my_cur is
    select  a.rowid row_id
    from tabacca a where exists (select 1 from temptablea b where a.id=b.id and b.type='1')
  order by a.rowid;
begin
open my_cur;
loop
exit when my_cur%NOTFOUND;
fetch my_cur bulk collect into tb_row_id limit maxrows;
forall i in 1..tb_row_id.count
    delete tabacca  where rowid= tb_row_id(i);
      commit;
  end loop;
end;

作者: lxpbs8851   发布时间: 2011-12-14

非常感谢!您上面说的方法我用过了,效果不是多理想!

作者: dongxnbz   发布时间: 2011-12-14

删除数据是挺长。如果要快就是把表改名字重建。导入数据这样快多了。但是如果是生产库。这样做就不合适。

作者: yangqm22   发布时间: 2011-12-14

用 索引 + ROWID 去删除!

作者: luoyoumou   发布时间: 2011-12-14

热门下载

更多