Sql 从包含数十亿行的表中删除特定行
我有一个包含数十亿行的庞大SQL表。例如,如果我必须删除特定日期的记录。最好的方法是什么Sql 从包含数十亿行的表中删除特定行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个包含数十亿行的庞大SQL表。例如,如果我必须删除特定日期的记录。最好的方法是什么 Delete * from dbo.table where date in ('date1','date2','date3') 请建议WHILE(1=1) WHILE (1 = 1) BEGIN DELETE TOP (10000) FROM Table_Name WHERE DATE_COLUMN = '20140101' --<-- ANSI DATE format
Delete * from dbo.table where date in ('date1','date2','date3')
请建议WHILE(1=1)
WHILE (1 = 1)
BEGIN
DELETE TOP (10000)
FROM Table_Name
WHERE DATE_COLUMN = '20140101' --<-- ANSI DATE format YYYYMMDD
OR
DATE_COLUMN = '20140102'
OR
DATE_COLUMN = '20140103'
IF (@@ROWCOUNT < 1)
BEGIN
BREAK;
END
END
开始
删除顶部(10000)
从表\u名称
其中DATE_COLUMN='20140101'--您知道日期字段上的索引是什么类型的吗?您介意说明您遇到了什么问题吗?是不是太慢了?是它把你的日志炸掉了吗?它吞噬了所有的记忆吗?试试你的方法。如果您不满意,请返回问题。在日期列上使用索引,我会使用介于“date1”和“dateN”之间的where dateColumn
clause@ZoffDino:同意。=)我很好奇;为什么这比OP的SQL好?假设date列上存在索引,批处理技术将减少日志空间需求并提高并发性。@DeanOC请参阅