😺
DELETEとTRUNCATEの違い
はじめに
このページではSQLにおけるDELETE
とTRUNCATE
の違いについて記述します。
DELETE
とTRUNCATE
の違い
DELETE
とTRUNCATE
は、SQLにおいてテーブルからデータを削除するために使用されるコマンドですが、それぞれの動作やパフォーマンスに大きな違いがあります。以下では、それぞれのコマンドの特徴と使用例について詳しく説明します。
DELETE
コマンド
1. DELETE
コマンドは、テーブル内の特定の行を削除するために使用されます。WHERE
句を使用することで、削除する行を条件に基づいて選択することができます。
構文
DELETE FROM テーブル名 WHERE 条件;
例
users
テーブルからage
が30以上のユーザーを削除する場合:
DELETE FROM users WHERE age >= 30;
特徴
-
行ごとに削除:
DELETE
は指定した条件に基づいて、行ごとに削除を行います。 -
トランザクションのサポート:
DELETE
はトランザクションの一部として使用できます。そのため、COMMIT
やROLLBACK
を使って操作を確定または取り消すことができます。 -
トリガーが実行される:
DELETE
操作では、関連するトリガー(AFTER DELETE
など)が実行されます。 -
削除の速度:
DELETE
は行ごとにロックをかけるため、大量のデータを削除する際はパフォーマンスが低下することがあります。
TRUNCATE
コマンド
2. TRUNCATE
コマンドは、テーブルのすべての行を削除し、テーブルを初期化するために使用されます。TRUNCATE
はDELETE
と異なり、個々の行を削除するのではなく、テーブル全体をリセットします。
構文
TRUNCATE TABLE テーブル名;
例
users
テーブルのすべてのデータを削除する場合:
TRUNCATE TABLE users;
特徴
-
全行削除:
TRUNCATE
はテーブル内のすべての行を削除しますが、テーブルの構造(列やインデックスなど)は保持されます。 -
高速な操作:
TRUNCATE
はテーブルのデータページを直接リセットするため、DELETE
よりも高速です。 -
トランザクションとトリガーの制限: 一部のデータベースでは
TRUNCATE
はトランザクション内で使用できなかったり、トリガーが実行されない場合があります。 -
自動コミット:
TRUNCATE
は通常、自動的にコミットされ、ROLLBACK
で取り消すことはできません。
3. パフォーマンスの違い
DELETE
とTRUNCATE
のパフォーマンスの違いは、削除の方式に大きく依存します。
-
DELETE
は、行ごとに削除を行い、削除された各行についてトランザクションログを記録します。これにより、削除する行数が増えるとパフォーマンスが低下します。 -
TRUNCATE
は、テーブル全体を一度に削除するため、トランザクションログにはページの解除だけが記録されます。このため、DELETE
よりもはるかに高速です。
4. コマンドの比較
特徴 | DELETE |
TRUNCATE |
---|---|---|
削除対象 | 条件で指定した行 | テーブル内の全ての行 |
トランザクション対応 | 対応(COMMIT やROLLBACK が可能) |
自動コミット(通常はROLLBACK 不可) |
トリガー実行 | 実行される | 実行されない場合がある |
パフォーマンス | 行ごとに削除されるため、大量データでは遅い | ページ単位で削除されるため高速 |
テーブルの構造 | 保持される | 保持される |
まとめ
DELETE
とTRUNCATE
はどちらもテーブルからデータを削除するためのコマンドですが、使い方やパフォーマンスの点で大きな違いがあります。条件に基づいて特定の行を削除したい場合はDELETE
を使用し、テーブルのすべてのデータを一度に削除したい場合はTRUNCATE
を使用すると良いでしょう。それぞれの特徴を理解し、適切なシナリオで使い分けることが重要です。
Discussion