Oracle中Truncate和Delete的區別測試

1、TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令Delete將被撤銷,而TRUNCATE則不會被撤銷。
2、TRUNCATE是一個DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
3、TRUNCATE將重新設置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作後的表比Delete操作後的表要快得多。
4、TRUNCATE不能觸發任何Delete觸發器。
5、不能授予任何人清空他人的表的權限。
6、當表被清空後表和表的索引講重新設置成初始大小,而delete則不能。
7、不能清空父表。

TRUNCATE TABLE (schema)table_name Drop(REUSE)

在默認是 Drop STORAGE 當使用Drop STORAGE時將縮短表和表索引,將表收縮到最小範圍,並重新設置NEXT參數。REUSE STORAGE不會縮短表或者調整NEXT參數ITPUB個人空間;

在特殊情況下使用 REUSE STORAGE

一個實際應用的典型例子:你用sqlldr加載一個1000萬記錄的數據表,但是加載了多一半的時候你發現有問題,這個時候你想清空表重新加載。那麼最好 reuse storage ,這樣再次加載就不需要再次尋找空閒空間了。

1 一個只有一列的最簡單的表

SQL> desc t;
名稱 是否爲空? 類型
----------------------------------------- -------- ----------------------------

A VARCHAR2(200)


2 清理以前的數據
SQL> truncate table t;

表被截斷。

3 打開時間顯示
SQL> set timing on;

4 查看當前情況
SQL> select count(*) from t;

COUNT(*)
----------
0

已用時間: 00: 00: 00.00

5 向裏面插入100萬數據
SQL> begin
2 for i in 1 .. 1000000
3 loop
4 insert into t values(i);
5 end loop;
6 end;
7 /

PL/SQL 過程已成功完成。

已用時間: 00: 00: 34.42


6 檢查數據情況,注意使用的時間在0.03秒左右
SQL> select count(*) from t;

COUNT(*)
----------
1000000

已用時間: 00: 00: 00.03
SQL> select count(*) from t;

COUNT(*)
----------
1000000

已用時間: 00: 00: 00.03

7 提交
SQL> commit;

提交完成。

已用時間: 00: 00: 00.00

8 再次測試,在0.02秒左右
SQL> select count(*) from t;

COUNT(*)
----------
1000000

已用時間: 00: 00: 00.03

9 刪除所有的數據
SQL> delete from t;

已刪除1000000行。

已用時間: 00: 00: 23.71

10 再次測試,大約在0.01秒左右
SQL> select count(*) from t;

COUNT(*)
----------
0

已用時間: 00: 00: 00.01
SQL> select count(*) from t;

COUNT(*)
----------
0

11 截斷表
SQL> truncate table t;

表被截斷。

已用時間: 00: 00: 00.29

12 再次查詢,用時爲0
SQL> select count(*) from t;

COUNT(*)
----------
0

已用時間: 00: 00: 00.00
SQL> select count(*) from t;

COUNT(*)
----------
0

已用時間: 00: 00: 00.00
SQL>


13 結論
數據被刪除後,高水平線(high-water mark,HWM)並沒有復位只是那些空間不再使用而已,再次查詢依然會讀取HWH以前的塊查找是否有可用的數據。而截斷表將復位HWH,告訴這些空間沒有保存數據。

所以,如果允許截斷表(注意:會產生事務提交),則truncate操作比delete操作的結果更好。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/java2000_net/archive/2009/01/07/3728313.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章