2017/12/07

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文ではクリアされない点に注意が必要です。
必要に応じて使い分けましょう。
関連