【SQLデータ削除】DELETEとTRUNCATEの違い

differences-between-SQL-commands-DELETE-and-TRUNCATE Database

SQLの基本は知っているつもりでしたが、
こんなのあったんだ!というのがあったのでメモ!

データ削除操作には主にDELETEとTRUNCATEの2つのコマンドがあり、
これらのコマンドは表(テーブル)からデータを削除する点では共通していますが、
使用方法、パフォーマンス、副作用には大きな違いがあります。

本記事では、DELETEとTRUNCATEの概要からメリット・デメリット、
使い分けについて初心者にもわかりやすく解説します。
※DELETE使いがちですが、TRUNCATEの方がメリットありそうでした。

DELETEコマンド

概要

DELETEは、指定した条件に一致する行をテーブルから削除します。
条件を指定しない場合、テーブル内の全行を削除しますが、テーブル領域は保持されます。

詳細

  • 条件に一致する特定の行のみを削除することができます。
  • トランザクションの一部として実行することができ、
    削除操作をロールバックして元に戻すことが可能です。
  • 削除される各行に対してトリガーが実行されます。
  • ハイウォーターマーク(HWM)も割り当て領域もクリアしません。

メリット

  • 条件を細かく指定して特定のデータのみを削除できる柔軟性があります。
  • 削除操作を取り消すことができます(ロールバック可能)。

デメリット

  • 大量のデータを削除する場合、
    パフォーマンスが低下することがあります。
    ※HWMがクリアされていないため、
     実データ数は少ないのに検索処理時間がかかる可能性がある。
  • 上と似てますが、TRUNCATEに比べて処理が遅いです。
  • テーブル内のデータを全て削除する場合でも、
    空のページがテーブルに残ることがあります。

TRUNCATEコマンド

概要

TRUNCATEは、テーブル内の全行を高速に削除し、
テーブルを初期化するコマンドです。条件指定はできません。

詳細

  • テーブルから全ての行を削除しますが、
    テーブル構造とインデックスは保持されます。
  • トランザクションログを少なく消費し、
    削除操作を高速に行うことができますが、
    通常はロールバックできません(一部のDBMSでは可能)。

メリット

  • 大量のデータを含むテーブルを迅速にクリアすることができます。
    ※DELETEに比べ圧倒的に早い!
  • テーブルをリセットするのに適しており、パフォーマンスが高いです。
  • ハイウォーターマーク(HWM)をクリアします。
    ※割り当て領域のクリアはオプションで選択可能

デメリット

  • 条件を指定して特定のデータのみを削除することはできません。
  • 一部のDBMSを除き、
    実行後に操作をロールバックすることはできません。

使い分け

  • DELETE:
    特定の条件に基づいてデータを削除したい場合や、
    削除操作をロールバックする可能性がある場合に適しています。
  • TRUNCATE:
    テーブル内のデータをすべて高速に削除し、
    テーブルを初期状態に戻したい場合に適しています。
    ただし、削除操作を元に戻すことはできないため、使用には注意が必要です。

適切なコマンドの選択は、操作の目的とパフォーマンスの要件によって異なります。
データの安全性を確保しつつ、効率的にデータ管理を行うために、
これらの違いを理解し、適切に使い分けることが重要です。

まとめ

本記事では、
データ削除操作のDELETETRUNCATEの2つのコマンドをご紹介しました。
これらのコマンドは表(テーブル)からデータを削除する点では共通していますが、
使用方法、パフォーマンス、副作用には大きな違いがあります。

DELETEとTRUNCATEのメリット・デメリットを考慮し、
使い分けていきましょう〜。

誰かの参考になれば幸いです!

コメント

タイトルとURLをコピーしました