它是否更有效率,並最終以1000或10000的塊刪除數據庫中的行?我不得不從許多表中刪除大約3百萬行。我首先做了100K行的刪除,但表現並不好看。我改爲10000,似乎更快地移除。想知道如果DELETE語句更小,比如1K更好。高效DELETE TOP?
想法?
我刪除這樣的:
DELETE TOP(10000)
FROM TABLE
WHERE Date < '1/1/2012'
它是否更有效率,並最終以1000或10000的塊刪除數據庫中的行?我不得不從許多表中刪除大約3百萬行。我首先做了100K行的刪除,但表現並不好看。我改爲10000,似乎更快地移除。想知道如果DELETE語句更小,比如1K更好。高效DELETE TOP?
想法?
我刪除這樣的:
DELETE TOP(10000)
FROM TABLE
WHERE Date < '1/1/2012'
是的,不,它取決於表的使用,由於鎖定。我會嘗試以較慢的速度刪除記錄。所以與op的問題相反。
set rowcount 10000
while @@rowcount > 0
begin
waitfor delay '0:0:1'
delete
from table
where date < convert(datetime, '20120101', 112)
end
set rowcount 0
是的。這一切都取決於你的服務器,但。我的意思是,上次我做了這件事,我正在使用這個方法以6400萬的增量刪除東西(在一個表格上有大約140億行,其中80%最終被刪除了)。我每隔10秒左右就會刪除一次。
這真的取決於你的硬件。去粒度更多的工作,但它意味着更少的等待tx日誌在桌子上運行的其他事情。你必須嘗試並找到你感到舒服的地方 - 沒有最終的答案,因爲它完全依賴於桌子和硬件的使用。
我們使用Table Partitioning在不到一秒的時間內刪除了500萬行,但這只是來自一個表。它預先做了一些工作,但最終是最好的方法。這可能不是最適合你的方式。
從我們的文檔有關分區:
比方說,你要500萬行添加到表中,但不想當你這樣做是爲了鎖定表了。我在排序系統中遇到了一個案例,在這個系統中,我無法在不停止系統接單的情況下插入行。壞!如果添加不與當前數據重疊的行,則分區是這樣做的一種方式。
什麼需要注意的:
數據不能重疊的當前數據。你必須在一個值上分割數據。新數據不能在當前分區數據中交織在一起。如果刪除數據,則必須刪除整個分區。你將不會有一個WHERE子句。
如果您正在生產數據庫上執行此操作並希望限制對錶的鎖定,請使用「ONLINE = ON」創建索引。 STEPS的
概述:
添加RECORDS
FOR刪除記錄
@Shiva這將是很好,如果它不會是錯的。鏈接在簡單恢復方案中談到較小的日誌。壞消息 - 重要的數據庫不是簡單的恢復。例如,我們每15分鐘進行一次tx日誌備份。有了真正的恢復模型,除非用截斷法擦除表格,否則tx日誌無法填滿。壞消息 - 現實並不符合你。 – TomTom