2014-09-02 58 views
-2

我拥有数十亿行的巨大SQL表。例如,如果我只需要DELETE记录的特定日期。什么是最好的方法。从具有数十亿行的表中删除特定的行

Delete * from dbo.table where date in ('date1','date2','date3') 

请建议

+0

你知道,如果任何索引上的日期字段是什么类型。 – 2014-09-02 23:16:20

+1

你介意说明你有什么问题吗?它太慢了吗?它炸毁你的日志吗?它吃了所有的记忆吗?尝试你的方法。如果您不满意,请回来解决问题。 – 2014-09-02 23:49:06

+0

在日期列上使用索引,我会在'date1'和'dateN'条款之间使用'where dateColumn – 2014-09-02 23:49:43

回答

3
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 
+0

我很好奇;为什么这比OP的SQL更好? – DeanOC 2014-09-02 23:33:19

+1

假设日期列上存在索引,批处理技术将缓解日志空间需求并提高并发性。 – 2014-09-02 23:48:02

+1

@DeanOC请参阅http://sqlperformance.com/2013/03/io-subsystem/chunk-deletes – 2014-09-03 01:14:37