使用SQL中TRUNCATE TABLE語句進(jìn)行快速刪除
在SQL數(shù)據(jù)庫中,不適用DELETE語句,一樣可以刪除表中的數(shù)據(jù),下面就將為您介紹使用SQL中TRUNCATE TABLE語句進(jìn)行快速刪除的方法。
若要刪除表中的所有行,則 TRUNCATE TABLE語句是一種快速、無日志記錄的方法。TRUNCATE TABLE語句與不含有 WHERE 子句的 DELETE 語句在功能上相同。但是,TRUNCATE TABLE語句速度更快,并且使用更少的系統(tǒng)資源和事務(wù)日志資源。
與 DELETE 語句相比,TRUNCATE TABLE語句具有以下優(yōu)點:
所用的事務(wù)日志空間較少。
DELETE 語句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放用于存儲表數(shù)據(jù)的數(shù)據(jù)頁來刪除數(shù)據(jù),并且在事務(wù)日志中只記錄頁釋放。
使用的鎖通常較少。
當(dāng)使用行鎖執(zhí)行 DELETE 語句時,將鎖定表中各行以便刪除。TRUNCATE TABLE 始終鎖定表和頁,而不是鎖定各行。
如無例外,在表中不會留有任何頁。
執(zhí)行 DELETE 語句后,表仍會包含空頁。例如,必須至少使用一個排他 (LCK_M_X) 表鎖,才能釋放堆中的空表。如果執(zhí)行刪除操作時沒有使用表鎖,表(堆)中將包含許多空頁。對于索引,刪除操作會留下一些空頁,盡管這些頁會通過后臺清除進(jìn)程迅速釋放。
與 DELETE 語句相同,使用 TRUNCATE TABLE語句清空的表的定義與其索引和其他關(guān)聯(lián)對象一起保留在數(shù)據(jù)庫中。
【編輯推薦】