2014-04-10 73 views

回答

-1

這是否意味着當我包含數百萬條記錄的TRUNCATE TABLE時,我不應該影響事務日誌文件 - 即事務日誌文件不應該在截斷時長大 - 我是否正確?

那麼你沒有指定實際的服務器軟件,但在所有情況下,我知道這是正確的。

DELETE有效地逐行工作,刪除記錄,觸發任何適當的觸發器,並向日志添加事務。

TRUNCATE只是一次性刪除所有的數據,而不是明顯影響事務日誌(當然不足以允許回滾)並且不執行觸發器

+1

@D斯坦利 - SQL Server允許回滾的截斷。如果我們使用begin tran - 你能從你的結尾再次嘗試嗎? – Roshan

3

在MS SQL Server(聯機叢書)

相比DELETE語句,TRUNCATE TABLE具有以下優點:使用

  • 較少的事務日誌空間。

    DELETE語句一次刪除一行,並在事務日誌中記錄每個刪除行的條目。 TRUNCATE TABLE通過釋放用於存儲表數據的數據頁來刪除數據,並僅在事務日誌中記錄頁解除分配。

  • 通常使用較少的鎖。

    當使用行鎖執行DELETE語句時,表中的每一行都被鎖定以供刪除。 TRUNCATE TABLE總是鎖定表(包括模式(SCH-M)鎖)和頁面,但不是每行。

  • 毫無例外地,零頁仍留在表格中。

    執行DELETE語句後,表格仍可以包含空白頁面。例如,如果沒有至少一個獨佔(LCK_M_X)表鎖,堆中的空頁將無法解除分配。如果刪除操作不使用表鎖,表(堆)將包含許多空白頁。對於索引,刪除操作可以留下空白頁面,但這些頁面將通過後臺清理過程快速解除分配。

    TRUNCATE TABLE刪除表中的所有行,但表結構及其列,約束,索引等依然存在。要除了其數據外還要除去表定義,請使用DROP TABLE語句。

    如果該表包含標識列,則該列的計數器將重置爲爲該列定義的種子值。如果未定義種子,則使用默認值1。要保留身份計數器,請改爲使用DELETE。

來源:http://msdn.microsoft.com/en-us/library/ms177570.aspx