Truncate table詳解及與delete,drop的區別
語法: TRUNCATE TABLE [schema.] table [{DROP | REUSE} STORAGE]
功能: 刪除整個表的資料並釋放空間
由於Truncate 是DDL命令,所以執行過程中原資料不放在Rollback Segment中,不產生回滾資料 ,不產生Redo Log 。 Truncate , Drop等DDL命令都是隱含提交的 。
使用Truncate將會:
1.清除相應索引(不是Drop,仍然保留extent) ;
2.受外來鍵參考的約束(FOREIGN KEY).當然必須先DISABLE或DROP相應的外來鍵參 考,才能TRUNCATE,注意沒有CASCADE選項 .
3.不觸發DELETE觸發器
4.若使用了DROP STORAGE(預設), 除了已指定的MINEXTENTS,其它EXTENT重新分配NEXT_EXTENT設定MINEXTENTS之後的EXTENT,High-Water Mark復位指向表中的第一個BLOCK。 使用REUSE STORAGE保留表的使用空間 ,保留原來的擴充套件,但不合並; HWM(高水位)的位置RESET到第一個BLOCK。 當使DROP STORAGE時將縮短表和表索引,將表收縮到最小範圍,並重新設定NEXT引數。 REUSE STORAGE不會縮短表或者調整NEXT引數。
Truncate 語句預設情況(預設情況為drop storage)下空間釋放到 minextents個 extent, 除非使用reuse storage (如果使用reuse storage,那麼這些刪除之後留下的空間會被保持) ; Truncate會將高水線復位(回到最開始)。 如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新匯入/插入資料。
Delete 語句不影響表所佔用的extent, 高水線(high watermark)保持原位置不動 。 Delete語句是DML,這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發。
Drop語句將表所佔用的空間全部釋放 。 drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的儲存過程/函式將保留,但是變為invalid狀態 。
Truncate :
drop storage是預設值,其與reuse storage的區別是是否回收清除表中rows的free space給tablespace,如果使用了drop storage,回收回來的frespace可以供其它segment使用,否則這部分空間只能表自己用。
另外一個區別是,用reuse storage可以減少對錶及資料字典的鎖定時間,特別是大表常這樣做,餘下和DEALLOCATE UNUSED 來逐步回收空間。
而對於hwm不論是用drop storage還是reuse storage都會回縮到第一個block。
速度上,一般來說: drop> truncate > delete .
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84414/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Truncate table 詳解及與delete,drop 的區別delete
- SQL truncate 、delete與drop區別SQLdelete
- truncate delete drop 區別delete
- drop table和truncate table的區別
- 資料庫:drop、truncate、delete的區別資料庫delete
- drop、delete 與truncatedelete
- truncate與delete的區別delete
- oracle truncate 與 delete 的區別Oracledelete
- 詳解SQL中drop、delete和truncate的異同SQLdelete
- truncate和不帶where子句的delete, 以及drop區別delete
- truncate delete 的區別delete
- Truncate,Delete,Drop的比較.delete
- zt_orafaq_delete與truncate的區別delete
- truncate和delete 的區別delete
- truncate,delete,drop的異同點delete
- 簡述truncate、delete和dropdelete
- HWM和delete,drop,truncate的關係delete
- truncate,delete,drop的異同點(原)delete
- 關於delete,drop,truncate的問題delete
- delete table 和 truncate table - 型別安全的心 - 部落格園delete型別
- delete和truncate刪除的區別delete
- Oracle中truncate和delete的區別Oracledelete
- 在MySQL中 Truncate Delect Drop 的區別MySql
- SQLSERVER 的 truncate 和 delete 有區別嗎?SQLServerdelete
- Oracle中truncate和delete的區別(例項)Oracledelete
- [轉][資料庫SQL語句]truncate/delete/drop同與不同資料庫SQLdelete
- oracle恢復表delete/truncate/drop的方法總結Oracledelete
- 表管理之四:刪除資料Delete與truncate的使用區別delete
- 資料庫關鍵詞 drop、truncate和delete的用法資料庫delete
- oracle實驗記錄 (基礎,truncate與delete區別實驗)Oracledelete
- table中cesllspacing與cellpadding的區別詳解padding
- rman 中delete 與delete force 的區別delete
- v$lock之alter table drop column與alter table set unused column區別系列五
- alter database drop datafile 與 drop tablespace file 的區別Database
- RMAN恢復單個表空間或被DROP/DELETE/TRUNCATE的表delete
- equals與==的區別(詳解)
- 詳解not in與not exists的區別與用法
- delete 和 delete [] 的真正區別delete