我有一个经典的“销售”数据库,其中包含某些表中的数百万行。在这些大表中的每一个上,我都有一个关联的“删除”触发器和“备份”表。
此备份表在过去 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())
备份表的结构类似于原始数据表(键、值)。唯一的区别是我在备份表中添加了一个“已修改”字段,我将其集成到密钥中。
我的一位同事告诉我应该使用“循环”,因为一旦备份表包含数百万行,我的删除语句就会导致超时/问题。该删除实际上会在某个时候爆炸吗?我应该以不同的方式做某事吗?