前端之家收集整理的这篇文章主要介绍了
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.这些可能允许您通过删除整个分区来清除旧条目.
原文链接:https://www.f2er.com/mssql/81370.html