かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

TRUNCATEと全件DELETEの違い

time 2016/02/19

TRUNCATEと全件DELETEの違い

TRUNCATE TABLE文と条件なしでのDELETE文を違いを本記事では解説します。
両方ともテーブル内の全データを削除するという点では同じですが、処理時間や割り当て領域・HWMのクリアといったところに差異があるので、詳しく見ていきます。

sponsored link

全データを削除するという点では同じ

TRUNCATE TABLE文と条件なしでのDELETE文は、全データを削除するという点では同じです。

処理時間の差異

削除する際の処理時間は、圧倒的にTRUNCATE TABLE文が早いです。

TRUNCATE TABLE文は、1秒以内~数秒程度で処理出来ますが、DELETE文はかなりの時間がかかります。(データ量によっては10分以上かかるケースも)

割り当て領域・HWMのクリアの差異

TRUNCATE TABLE文は、ハイウォーターマーク(HWM)をクリアし、割り当て領域のクリアはオプションで選択できます。
DELETE文は、HWMも割り当て領域もクリアしません。

大量にDELETEした後は、HWMがクリアされていないため、実データ数は少ないにもかかわらず検索に処理時間がかかるといった現象が起こります。

TRUNCATE TABLE文はDDL、DELETE文はDML

TRUNCATE TABLE文はDDL(データ定義言語)の一種です。
そのため、実行前に暗黙的にCOMMITがかかる点で注意が必要です。
また、実行後にCOMMITは不要で、ROLLBACKで戻せない点も注意が必要です。

DELETE文はDML(データ操作言語)の一種です。
そのため、処理を確定するためにはCOMMITが必要で、ROLLBACKで戻すことも可能です。

必要な権限が異なる

TRUNCATE TABLE文はDROP権限が必要ですが、DELETE文はDELETE権限が必要です。

必要な権限が異なる点に注意が必要です。

まとめ

TRUNCATE TABLE文と条件なしでのDELETE文の違いを見てきました。
特に処理時間の違いとHWMがDELETE文ではクリアされない点に注意が必要です。
必要に応じて使い分けましょう。

関連

sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link