sql >> データベース >  >> RDS >> Sqlserver

TRUNCATE と DELETE FROM の長所と短所

    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 の回答.



    1. ダンプせずにpostgresqlの列の位置を変更する方法

    2. 別の列でエイリアス名を使用する

    3. mysqlは停止していますが、subsysはロックされています

    4. PHPの管理者によるユーザーの追加、削除、編集