我拥有数十亿行的巨大SQL表。例如,如果我只需要DELETE
记录的特定日期。什么是最好的方法。从具有数十亿行的表中删除特定的行
Delete * from dbo.table where date in ('date1','date2','date3')
请建议
我拥有数十亿行的巨大SQL表。例如,如果我只需要DELETE
记录的特定日期。什么是最好的方法。从具有数十亿行的表中删除特定的行
Delete * from dbo.table where date in ('date1','date2','date3')
请建议
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
我很好奇;为什么这比OP的SQL更好? – DeanOC 2014-09-02 23:33:19
假设日期列上存在索引,批处理技术将缓解日志空间需求并提高并发性。 – 2014-09-02 23:48:02
@DeanOC请参阅http://sqlperformance.com/2013/03/io-subsystem/chunk-deletes – 2014-09-03 01:14:37
你知道,如果任何索引上的日期字段是什么类型。 – 2014-09-02 23:16:20
你介意说明你有什么问题吗?它太慢了吗?它炸毁你的日志吗?它吃了所有的记忆吗?尝试你的方法。如果您不满意,请回来解决问题。 – 2014-09-02 23:49:06
在日期列上使用索引,我会在'date1'和'dateN'条款之间使用'where dateColumn – 2014-09-02 23:49:43