sql – DELETE命令在具有聚簇索引的表中太慢了

前端之家收集整理的这篇文章主要介绍了sql – DELETE命令在具有聚簇索引的表中太慢了前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个相当大的名为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.这些可能允许您通过删除整个分区来清除旧条目.

猜你在找的MsSQL相关文章