《Truncate table one or million rows》

摘要:《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

總結看來比較大的資料表還是比較慢,但是都很快是不爭的事實!