プロが教える店舗&オフィスのセキュリティ対策術

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


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

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

Oracle10g

A 回答 (2件)

残したいデータ(レコード)に共通点があれば可能です。


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

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

方法無し。

なぜDELETEではいけないのか?遅いと何が問題なのか?
    • good
    • 4

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A