最近友人が私に尋ねたところ、SQLSERVER の数百万から数千万のデータを削除するのが非常に遅いとのことで、私は彼の分析を手伝い、次のようにいくつかの提案をしました。
まだブログを書いていないので、ハードディスクの容量が少なく、データベース ログを最小値に設定したくない場合は (他の通常のログも残しておきたいため)、
一緒に話し合いましょう。
記録済み)、比較的高速な要件があり、すべてのデータをクリアする場合は、turncate table1 を使用することをお勧めします。truncate は DDL 操作であり、ロールバックは生成されず、ログを書き込まない場合は高速であるためです。は自動インクリメントであり、1 に復元されます。大量のデータを含むテーブルを削除すると、速度が非常に遅くなり、多くのロールバック セグメントが占有されます。もちろん、G レベルのログを記録します。where time<'2006-3-10' のような条件付きの削除がある場合は、ログを記録せずに削除できますか? 答えは「いいえ」です。SQL Server エンジンは、削除を記録するように設計されています。操作。今のところ、特定のステートメントを強制的にログに記録しないようにする方法はありません。時刻 < '2006-3-10' のテーブル 1 を削除すると、多数のステートメントが存在するため、ログ レコードが非常に大きくなります (3 ~ 4G)。
可能であれば、新しいテーブルに保持する必要があるレコードを選択する
方法をお勧めします
。完全リカバリモードを使用する場合
SELECT INTO レコードの数によっては、ログが大きくなる場合があります。
Select * into Table2 From Table1 Where Time > = '2006-03-10' し
、Table1 を直接切り捨てます。復旧モデルに関係なく、ログは記録されません。
テーブル Table1 を切り捨て
、最後に Table2 の名前を Table1 に変更します。
EC sp_rename 'Table2', 'Table1'
出典: BLOG:domino's column