私は3億のレコードを含むテーブル(テーブルA)を持っています。いくつかの基準に基づいてデータ保持アクティビティを実行したいと思います。だから私はテーブルの約200Mのレコードを削除したい。条件に基づいて非常に大きなテーブルから古いレコードを削除する
パフォーマンスに関して、私はテーブル-Aからの最も古い10Mレコードで新しいテーブル(テーブル-B)を作成することを計画しました。テーブルAから10Mのレコードを抽出し、SQLローダーを使用してテーブルBにロードすると約5時間かかります。
私は既にインデックスを作成しており、適用可能な場合は常にパラレル32を使用しています。
私が知りたいと思ったことは、
- 表-Aから抽出するために、表-Bにそれをロードするために任意のより良い方法はあります。
- 一時テーブル(表B)を作成する以外の方法がありますか?
DBMS:Oracle 10g、PL/SQL、およびShell。
ありがとうございました。
両方のテーブルが同じデータベースにありますか?はいの場合、ホエーはSQL Loaderを使用してロードしていますか?単純に 'tableB select * from tableA'に挿入できませんか?また、より速い挿入のために 'no logging'としてtableBを作成してください。これについての詳細は、Googleの「nologging」を参照してください。 – Utsav
私は@Utsavに同意します。ちょうど 'insert/* + append */t2 select * from t1 select *何時でも何時にも数分かかるはずです。私が心配しているのは「削除」です。あなたはこれを行う必要がある次回のためにパーティショニングするオプションがありますか? –
「テンポラリテーブル(テーブルB)の作成以外にも優れたアプローチはありますか?」に関しては、私はあなたのプロセスロジックを理解していません。テーブルBとは何ですか?つまり、それを作成する代わりに、それを作成しないことです。 –