こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

大量レコードをTRUNCATEせずにすばやく削除する方法

大量レコードをTRUNCATEせずにすばやく削除する方法


100万レコードあるテーブルのうち1万レコードを残して削除したい。TRUNCATEではWHERE句が指定できないので不可。DELETEでは遅すぎる。何かいい方法はないでしょうか?

1万レコードを一時テーブルに退避してTRUNCATE後に1万レコードをINSERTというのは無しです。1万レコードが1秒でもテーブル上から消えてはいけません。

Oracle10g

投稿日時 - 2010-07-06 14:00:17

QNo.6019326

暇なときに回答ください

質問者が選んだベストアンサー

残したいデータ(レコード)に共通点があれば可能です。
予めパーティションテーブルとしておいて、
残したいデータのみを挿入するパーティションとそれ以外のパーティション定義とします。
パーティションレベルでのTRUNCATEやDROPであれば一瞬でできますし、
必要としている1万行が消えることも一切ありません。

ただし、EEのオプションとなりますが。
EEを買っていないのであれば各パーティションに相当するテーブルを作って
テーブルとテーブルをUNIONするVIEWを作る形になります。

投稿日時 - 2010-07-06 22:32:25

このQ&Aは役に立ちましたか?

17人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

方法無し。なぜDELETEではいけないのか?遅いと何が問題なのか?

投稿日時 - 2010-07-06 16:54:50

あなたにオススメの質問