2014-09-02 59 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