SQL刪除數據總結

1.-- truncate:

刪除內容不刪除定義、釋放空間,truncate後不會留有任何頁,速度快。

拉低高水位( 缺省情況下見空間釋放到 minextents個 extent,除非使用reuse storage;   truncate會將高水線復位(回到最開始) ),在系統表裏把相關的extend標記爲未使用,而不寫undo,基本不更新日誌,日誌裏面只記錄頁釋放,所用的事務日誌空間較少,無法rollback。

truncate不會觸發delete的觸發器,因爲truncate操作不記錄各個行刪除。

相當於是drop表以後建了一個同樣定義的表(包括相關的約束和索引等)


2.--delete:

刪除內容不刪除定義,不釋放空間,刪空表後,會保留一個空的頁,速度慢。

只是刪除了表中的數據,在存儲上來說只是在數據塊上做了一個標記而已,數據沒有真正刪除,不影響表所佔用的extent, 高水線(high watermark)保持原位置不動  ,要寫undo,所刪除的每行記錄都會進日誌,可以rollback。

如果有identity產生的自增id列,delete from後仍然從上次的數開始增加,而truncate後,會恢復初始。


3.--DROP TABLE:

刪除內容和定義,釋放空間,速度快。

即drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的存儲過程/函數將保留,但是變爲invalid狀態。



4.--使用總結:
想刪除部分數據行用delete,注意帶上where子句. 回滾段要足夠大.     想刪除表,當然用drop     
想保留表而將所有數據刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還是用delete
如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據。
發佈了51 篇原創文章 · 獲贊 13 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章