特定のテーブルに数百万行を含む古典的な「販売」データベースがあります。これらの大きなテーブルのそれぞれに、関連付けられた「削除」トリガーと「バックアップ」テーブルがあります。
このバックアップテーブルは、過去7日間「削除された」行を保持します。トリガーは、削除された行をそのバックアップテーブルにコピーすることから始まり、次の方法でバックアップの削除を実行します。
CREATE TRIGGER dbo.TRIGGER
ON dbo.EXAMPLE_DATA
FOR DELETE AS
INSERT INTO EXAMPLE_BACKUP
select getDate(), *
from deleted
DELETE from EXAMPLE_BACKUP
where modified < dateadd(dd, -7, getDate())
バックアップテーブルの構造は、元のデータテーブル(キー、値)と同様です。唯一の違いは、バックアップテーブルに「変更された」フィールドを追加し、それをキーに統合することです。
私の同僚は、バックアップテーブルに数百万行が含まれるとすぐに、deleteステートメントによってタイムアウト/問題が発生するため、「ループ」を使用する必要があると教えてくれました。その削除は実際にある時点で爆発しますか?別の方法で何かをする必要がありますか?