delete和truncate的區別

2021-06-26 14:46:44 字數 1120 閱讀 9968

測試省略  

delete命令並不能完全釋放掉**或者索引的資料結構以及他們申請的頁面。  

在這一點上,sql server2005以後的版本比之前的版本做得好些,樹比堆做  

得更好些。  

truncate語句和delete語句相比具有以下優點:  

1,所用的事務日誌空間較少  

delete每刪除一行資料,都會在事務日誌中為刪除的每行記錄乙個項。  

truncate table通過釋放用於儲存資料的資料也來刪除資料,並且在  

事務日誌中只記錄頁釋放這個動作,而不是記錄每一行。  

2,使用的鎖比較少  

當執行delete語句的時候,將鎖定表中各行以便刪除。truncate table  

始終鎖定表和頁面,而不是各行。  

3,表中毫無例外的不保留任何頁  

執行delete語句之後,表仍然會包含空頁。例如,必須至少使用乙個排他表鎖,  

才能釋放堆中的空頁。如果執行刪除操作時沒有使用表鎖,表(堆)中將包含  

許多空頁。對於索引,刪除操作會留下一些空頁,儘管這些頁會通過後太清除  

程序迅速釋放。  

truncate table刪除表中的所有行資料,但表的結構及其列,約束,索引等都  

保持不變。如要刪除表定義及其資料,直接使用drop table語句  

1,在**上建立聚集索引  

2,如果所有資料都不要了,要使用truncate table語句,而不是drop table語句  

3,如果**本身也不需要了,直接drop table  

此外需要說明的是:  

在delete資料之後,sql server卻沒有完全釋放空間,雖然這些空間沒被釋放掉,  

但是當**插入新的資料時,這些空間會被從新使用。  

如果真的看著這些空間礙事,而**又不能整個被刪除,處理起來就有點麻煩。如  

果**有聚集索引,重建以下索引能釋放這些頁面,還是很方便的。但是沒有聚集  

索引,可能就要重建一張表,把資料從舊表裡複製過去,然後刪除舊表,釋放空間  

或者在這張表上建立乙個聚集索引。 

這個以前真沒有注意,被人提醒,以後整表資料多用truncate table 效能是還是好些。

truncate和delete和drop的異同

相同點 truncate 和不帶 where 子句的 delete,以及 drop 都會刪除表內的資料 不同點 1.truncate 和 delete 只刪除資料不刪除表的結構 定義 drop 語句將刪除表的結構被依賴的約束 constrain 觸發器 trigger 索引 index 依賴於該錶的...

Truncate 和 Delete 的區別

truncate操作同沒有where條件的delete操作十分相似,只是把表裡的資訊全部刪除。主要區別如下 1.無論truncate 大表還是小表速度都非常快。delete 要產生回滾資訊來滿足回滾需求,而 truncate 是不產生的。2.truncate 是ddl 語句進行隱式提交,不能進行回滾...

TRUNCATE和DELETE的區別

1 truncate在各種表上無論是大的還是小的都非常快。如果有rollback命令delete將被撤銷,而truncate則不會被撤銷。2 truncate是乙個ddl語言,向其他所有的ddl語言一樣,他將被隱式提交,不能對truncate使用rollback命令。3 truncate將重新設定高...