我擁有數十億行的巨大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