テーブルから大きなレコードを削除する最良の方法はどれですか? 毎週、テーブルから約 3,000 万件のレコードを削除する必要があるという要件があります。ここでの問題は、UNDO 保持の問題があることです。役立つように、削除ステートメントをチャンクに分割することを計画しています。
現在のステートメント
DELETE FROM LARGE_TABLE WHERE LARGE_ID ='someValue';
表の詳細:
1. テーブルには約 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の保持が減少するということです。
質問、それはベストプラクティスですか? そうでない場合、ポインタはありますか?助けてください