天天看點

ORACLE中DROP、TRUNCATE和DELETE的差別

1、TRAUNCAT TABLE A;

       ————清空A表,并且釋放A表清空之前占用記憶體;

       ————TRUNCATE是一個DDL語言,執行之後自動送出事物,執行之後無法復原。

       ————隻有表格建立者,或者相關權限者才能執行此操作。

       ————執行速度快于DELETE;

       ————執行之後将重新設定高水位線(高水位線,High Water Mark,記憶體空間上限,Oracle中每個分區segment——也就是                          記憶體空間,都有一個上限。當表占用空間超過上限,高水位線會增大,而且這個值隻會增大,不會減小,當執行                                  DELETE時,雖然清楚了資料,但是HWM的值不會變,但是當執行TRUNCAT時,HWM會置為0);

       ————執行TRUNCATE之後再次操作表,速度會變快,因為HWM重置,不需要全表掃描很大的空間;

       ————當TRUNCATE表,表的所有索引被重置,進行查詢操作速度會變快;

       ————當TRUNCATE會重置辨別計數值,DELETE不會;

       ————當TRUNCATE會重置自增主鍵(Sequence鍵),從1開始,DELETE不會,這都是DDL性質決定的;

2、DELETE TABLE A;

       ————清空A表,不能釋放A表清空之前占用記憶體;

       ————DELETE是DML語言,執行之後需要手動送出事物,執行之後可以復原。

       ————執行DELETE之後再次操作表,速度不會變快,因為HWM沒有重置,仍需要全表掃描很大的空間;

       ————當DELETE表,表的所有索引不會被重置,進行查詢操作速度不會變快;

       ————當DELETE可以按條件删除,TRUNCATE不可以;

3、DROP TABLE A;

       ————DROP是DDL語句,隐式COMMIT,不能復原;

       ————清除表結構,清除表空間,TRUNCATE和DELETE不會;

       ————DROP會清除該表所有的限制,觸發器,索引等等;