sql – DELETE命令在具有聚簇索引的表中太慢了
发布时间:2020-12-12 16:47:02 所属栏目:MsSql教程 来源:网络整理
导读:我有一个相当大的名为FTPLog的表,大约有3亿个记录,我想添加删除机制来删除旧的日志,但是delete命令需要很长时间.我发现聚簇索引删除需要很长时间. DECLARE @MaxFTPLogId as bigintSELECT @MaxFTPLogId = Max(FTPLogId) FROM FTPLog WHERE LogTime = DATEADD(d
我有一个相当大的名为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.这些可能允许您通过删除整个分区来清除旧条目. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |