摘要:《Truncate table one or million rows》
itPUB 上看到一個問題,心血來潮想驗證一下;
問題是 truncate table 數百萬筆資料要多少時間,此版主反問 truncate table 2 筆資料要多少時間。
我的老師說 truncate table 是將 high water mark 從高點歸回原位,資料並未刪除;
那 truncate table 的時間應該一樣吧! 作個小實驗!
SQL> CREATE TABLE TINGTEST AS SELECT * FROM DBA_OBJECTS;
已建立表格.
SQL> CREATE TABLE TINGTEST2 AS SELECT * FROM DBA_OBJECTS WHERE ROWNUM<2;
已建立表格.
SQL> SELECT COUNT(*) FROM TINGTEST;
COUNT(*)
----------
44264
SQL> INSERT INTO TINGTEST SELECT * FROM TINGTEST;
已建立 44264 個資料列.
SQL> INSERT INTO TINGTEST SELECT * FROM TINGTEST;
已建立 88528 個資料列.
SQL> INSERT INTO TINGTEST SELECT * FROM TINGTEST;
已建立 177056 個資料列.
SQL> INSERT INTO TINGTEST SELECT * FROM TINGTEST;
已建立 354112 個資料列.
SQL> INSERT INTO TINGTEST SELECT * FROM TINGTEST;
已建立 708224 個資料列.
SQL> INSERT INTO TINGTEST SELECT * FROM TINGTEST;
已建立 1416448 個資料列.
SQL> INSERT INTO TINGTEST SELECT * FROM TINGTEST;
已建立 2832896 個資料列.
SQL> COMMIT;
確認完成.
SQL> SELECT COUNT(*) FROM TINGTEST;
COUNT(*)
----------
5665792
SQL> SELECT COUNT(*) FROM TINGTEST2;
COUNT(*)
----------
1
SQL> SET TIMING ON
SQL> TRUNCATE TABLE TINGTEST;
表格被截斷.
目前歷時: 00:00:00.02
SQL> TRUNCATE TABLE TINGTEST2;
表格被截斷.
目前歷時: 00:00:00.00
總結看來比較大的資料表還是比較慢,但是都很快是不爭的事實!