0

从表中删除大记录的最佳方法是什么?我有一个要求,我需要每周从一个表中删除大约 3000 万条记录。这里的问题是,存在 UNDO 保留问题。我打算将我的删除语句分成几块,这样它会有所帮助。

当前声明

DELETE FROM LARGE_TABLE WHERE LARGE_ID ='someValue';

表详情:

1.Table 将有大约 7000 万条记录。

2.删除至少会影响40-45%的表。

3.表不分区。

计划将语句更改为

LOOP 

DELETE FROM LARGE_TABLE WHERE LARGE_ID ='someValue' and ROWNUM <'some row number';
COMMIT;
select count(1) INTO nCountValue from LARGE_TABLE WHERELARGE_ID ='someValue' ;
EXIT WHEN nCountValue = 0;

END LOOP;

主要思想是这将减少UNDO保留。

问题,这是最好的做法吗?如果没有,任何指针?请帮忙

4

2 回答 2

2

在这种情况下,我将

CREATE TABLE LARGE_TABLE_NEW AS
SELECT * FROM LARGE_TABLE 
WHERE LARGE_ID <> 'someValue';

rename LARGE_TABLE to LARGE_TABLE_old;

Rename LARGE_TABLE_new to LARGE_TABLE;

验证一切正常,然后;

drop table LARGE_TABLE_OLD;

重新创建索引、约束(最好在删除之前保存它们);

这会更快,因为插入比删除快。更多更快。

于 2013-04-08T07:27:54.667 回答
0

要永久删除表,如果您的数据库是 10G,请使用清除

删除表 LARGE_TABLE_OLD 清除;

因为,从 10g 删除的表可以被替换,所以要永久删除它,需要使用 purge。

于 2013-04-09T05:30:23.797 回答