LoginSignup
1
1

More than 3 years have passed since last update.

DELETEとTRUNCATEの違い

Posted at

DELETEとTRUNCATEは、データを削除するということは、
同じなので違いを簡単にご説明します。

状況に応じて使い分けるのが大切です。

ロールバック出来るか?出来ないかの違い

DELETEは、ロールバック出来ます。
TRUNCATEは、ロールバック出来ません。

ハイウォーターマーク(HWM)の違い

DELETEは、ハイウォーターマークがリセットされません。
TRUNCATEは、リセットされます。

ハイウォーターマーク(HWM)とは?

パフォーマンスを意識する時以外は、気にしません。
一言でいうと、
テーブルにどれだけデータが入っているの?という目安のマークになります。

え?だから?って思いますがw
私も始めて聞いたときに、え?だから?って思いましたw

OracleがSQLを実行する時に、テーブルに対して、FULL SCANした場合のパフォーマンスに大きく影響します。

FULL SCANするとどうなるの?

名前の通り、テーブルの全レコードをSCAN(=チェック)します。

その時に、HWMのマークまでチェックします。

カンの良い方は、あれ?テーブルのデータ件数を元にチェックすればいいじゃん!
って思いませんか?
私も思いました。

ただ、コレがややこしいので、詳しくは割愛していまいますが、HWMのマーク位置を使用します。

で、話を戻すと、DELETEとだとHWMがリセットされません。
そうすると、100件データを削除しても、FULL SCAN上、100件があるだろうな~って思って、検索をします。
ただ、データは無いので抽出はされないのですが、100件分のデータ領域まで検索してしまいます。
あら、不思議。

なので、FULL SCANした場合の検索速度が遅くなります。

使い分けのポイント

後続の作業の有無の違いです。

具体的には、

1.バックアップ取得
2.データを削除
3.その後、諸々作業

で、3で失敗した時に、2もリセットしたい場合、等は、「DELETE」一択です!

1.バックアップ取得
2.データを削除

までなら、「TRUNCATE」一択です!

違いを把握して、使い分けてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1