摘要:《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
总结看来比较大的数据表还是比较慢,但是都很快是不争的事实!
原文:大专栏 《Truncate table one or million rows》