我有此功能可删除具有超过1000万行的大表中不再需要的历史数据
DELETE FROM BigTable
WHERE DATEDIFF(month,dtmtimestamp, getdate()) > 2)
Run Code Online (Sandbox Code Playgroud)
然后,我尝试使用此方法来减少事务日志使用的空间量:
WHILE (SELECT COUNT(*) FROM BigTable WHERE DATEDIFF(month,dtmtimestamp, getdate()) > 2) > 0 BEGIN
DELETE TOP 10000 FROM BigTable
FROM BigTable
WHERE DateDiff(month,dtmtimestamp, getdate()) > 2
CONTINUE END
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?还是我将以这种方式用完更多事务日志?
有什么好的方法提示吗?
干杯,
尼可
最终答案:
DECLARE @Remainder INT
DECLARE @ChunkSize INT
SET @Remainder = (SELECT COUNT(id) FROM BigTable WHERE dtmtimestamp < DateAdd(month, -2, getdate()))
SET @ChunkSize = CEILING(@Remainder/100) /* Divide the total into 100 parts, whole integers only */
WHILE @Remainder BEGIN …Run Code Online (Sandbox Code Playgroud)