SQL Server
 Computer >> コンピューター >  >> プログラミング >> SQL Server

SQL ServerのTRUNCATEとDELETEの違いとは?主な相違点と使い分けのポイント

Microsoft SQL Serverでデータを削除する際に使われる「DELETE」と「TRUNCATE TABLE」。どちらもテーブルからデータを取り除く構文ですが、内部の動作や仕組みには大きな違いがあります。本記事では、両者の基本的な違いと、それぞれの適切な使用場面について詳しく解説します。

DELETEステートメントとは

DELETEコマンドは、データベースからレコード(Record)を行(Row)単位で削除するためのコマンドです。DELETEでレコードを削除すると、すべての内部操作がトランザクションログ(Transaction Log)に記録され、関連する制約のチェックも実行されます。また、WHERE句と組み合わせることで、特定の条件に合致する行だけを選択的に削除することも可能です。

DELETEの主な特徴

  • 行単位で削除が行われ、削除された各行はトランザクションログに記録される
  • ログが残るため、誤って削除したデータでもトランザクションをロールバックすれば復元可能
  • WHERE句を使えば条件を指定した部分削除ができる
  • 実行にはテーブルに対するDELETE権限が必要(所有権の付与は不要)
  • IDENTITY列(自動採番列)の値はリセットされない
  • DELETEトリガーが設定されている場合は起動される

DELETEは単一のテーブルだけでなく、他のリレーショナルテーブルとの結合条件に基づいて特定のテーブルからデータを削除したい場合などにも広く使われています。

DELETEの基本構文

[ WITH <共通テーブル式> [ ,...n ] ]
DELETE
[ TOP ( expression ) [ PERCENT ] ]
[ FROM ]
{ table_name [ WITH ( table_hint [ ...n ] ) ]
| view_name
| rowset_function_limited
| table_valued_function
}
[ FROM <table_source> [ ,...n ] ]
[ WHERE { <search_condition>
| { [ CURRENT OF
{ { [ GLOBAL ] cursor_name }
| cursor_variable_name
}
]
}
}
]
[ OPTION ( <query_hint> [ ,...n ] ) ]
[ ; ]

TRUNCATE TABLEステートメントとは

TRUNCATE TABLEは、テーブル内のすべての行を一括して削除するためのコマンドです。DELETEと異なり行単位の処理ではなく、データページの割り当て解除という形で削除が行われるため、非常に高速に動作します。ただし、WHERE句による条件指定はできず、必ずテーブル全体のデータが対象となります。

TRUNCATE TABLEの主な特徴

  • すべての行が一括削除される(WHERE句での条件指定は不可)
  • データページ単位で処理されるため、DELETEより大幅に高速
  • 消費されるトランザクションログの領域が少ない
  • IDENTITY列(自動採番列)のカウンタがシード値にリセットされる
  • 実行にはテーブルのALTER権限(または所有権)が必要
  • 外部キー制約で参照されているテーブルに対しては実行不可
  • DMLトリガーは起動されない

TRUNCATE TABLEの基本構文

TRUNCATE TABLE table_name [ ; ]

DELETEとTRUNCATE TABLEの違いまとめ

比較項目DELETETRUNCATE TABLE
削除単位行単位テーブル全体(一括)
WHERE句使用可能使用不可
トランザクションログ全行分が記録されるページ割り当て解除のみ記録
処理速度比較的遅い高速
IDENTITY列リセットされないシード値にリセットされる
必要な権限DELETE権限ALTER権限
トリガー起動される起動されない
ロールバック可能トランザクション内なら可能

使い分けのポイント

特定の条件に該当するデータだけを削除したい場合や、削除操作を細かく制御・復元できるようにしたい場合はDELETEが適しています。一方、テストデータのクリアや一時テーブルの初期化など、テーブルの全データを素早く空にしたい場合はTRUNCATE TABLEが最適です。

なお、「TRUNCATE TABLEはロールバックできない」と思われがちですが、実際には明示的なトランザクション内で実行すればロールバック可能です。ただし本番環境での大量削除では、ログの肥大化やパフォーマンスへの影響も考慮し、運用要件に応じて両者を正しく使い分けることが重要です。

  1. SQL Server 2017のインストール手順を徹底解説!初心者向けステップバイステップガイド

    SQL Server 2017は、インストールプロセスにおいて多くの新機能が追加されたバージョンです。RやPythonに対応した「Machine Learning Service(機械学習サービス)」のサポート、SSIS Scale Out Master/Scale Out Workerの搭載、そしてPolyBaseの拡張オプションなどが含まれています。 本記事では、SQL Server 2017を段階的にインストールする具体的な手順を詳しく解説していきます。 はじめに:SQL Server 2017のダウンロード まず、SQL Server 2017のインストーラーは以下のMicrosof

  2. MS SQL Serverでデータベースを選択する2つの基本方法

    MS SQL Serverで操作対象となるデータベースを選択するには、主に以下の2つの方法があります。GUI操作とコマンド操作それぞれの特徴を理解し、状況に応じて使い分けることで、作業効率を高めることができます。 方法1:SQL Server Management Studio(SSMS)を使用する 視覚的に操作したい方には、SQL Server Management Studio(SSMS)を使った方法がおすすめです。 例として、msdbという名前のデータベース上でバックアップ履歴を参照するクエリを実行したい場合、ツールバーのドロップダウンリストからmsdbを選択します。 データベースのバッ