測試省略
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將重新設定高...