小编Nik*_*rts的帖子

从SQL Server中的大型表中删除时,如何减少事务日志的使用?

我有此功能可删除具有超过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)

sql t-sql sql-server sql-server-2005

3
推荐指数
1
解决办法
4279
查看次数

标签 统计

sql ×1

sql-server ×1

sql-server-2005 ×1

t-sql ×1