我有一个相当大的名为FTPLog的表,大约有3亿个记录,我想
添加删除机制来
删除旧的日志,但是delete命令需要很长时间.我发现聚簇索引
删除需要很长时间.
DECLARE @MaxFTPLogId as bigint
SELECT @MaxFTPLogId = Max(FTPLogId) FROM FTPLog WHERE LogTime <= DATEADD(day,-10,GETDATE())
PRINT @MaxFTPLogId
DELETE FROM FTPLog WHERE FTPLogId <= @MaxFTPLogId
我想知道如何提高删除的性能?
这可能很慢,因为大的
删除会
生成一个大事务日志.尝试以块形式
删除它,如:
WHILE 1 = 1
BEGIN
DELETE TOP (256) FROM FTPLog WHERE FTPLogId <= @MaxFTPLogId
IF @@ROWCOUNT = 0
BREAK
END
这会生成较小的事务.并通过为其他进程创建呼吸空间来缓解锁定问题.
您也可以查看partitioned tables.这些可能允许您通过删除整个分区来清除旧条目.