TRUNCATE
ロールバック データを生成しないため、非常に高速です。テーブルで使用されているデータ ページの割り当てを解除するだけです。
ただし、トランザクション中で、この削除を「元に戻す」機能が必要な場合は、DELETE FROM
を使用する必要があります。 、ロールバックする機能を提供します。
編集: 上記は SQL Server では正しくないことに注意してください (ただし、Oracle には当てはまります)。 SQL Server では、トランザクション内にいて、トランザクションがコミットされていない場合、切り捨て操作をロールバックできます。 SQL Server の観点から見ると、DELETE FROM と TRUNCATE の主な違いの 1 つは こちら :"DELETE ステートメントは、行を 1 つずつ削除し、削除された行ごとにトランザクション ログにエントリを記録します。TRUNCATE TABLE は、テーブル データの格納に使用されたデータ ページの割り当てを解除することによってデータを削除し、ページの割り当て解除のみをトランザクション ログに記録します。 ."
つまり、ページの割り当て解除のみがトランザクション ログに記録されるため、TRUNCATE 中のロギングは少なくなりますが、DELETE FROM では各行の削除が記録されます。これが、TRUNCATE が超高速である理由の 1 つです。
外部キー制約によって参照されているテーブル、インデックス付きビューに参加しているテーブル、またはトランザクション レプリケーションまたはマージ レプリケーションを使用して公開されているテーブルを切り捨てることはできないことにも、その MSDN リンクから注意してください。
編集 2: もう 1 つの重要なポイントは、TRUNCATE TABLE は ID を最初のシードにリセットするのに対し、DELETE FROM は中断したところからインクリメントを続けることです。参照:Ben Robinson の回答.