测试TRUNCATE表后,是否收集统计对于此表的DML性能的影响?
1,以小,中,大数据量为基础,各测不收集统计进行INSERT的时间与收集统计进行INSERT的时间差异
2,小表为1000,中表为100000,大表为10000000
3,小表表名为T_MIDDLE
中表表名为T_MIDDLE
大表表名为T_BIG
三表列一样,皆是A NUMBER
4,构建小中大表
CREATE TABLE T_MIDDLE(A NUMBER);
CREATE TABLE T_MIDDLE(A NUMBER);
CREATE TABLE T_BIG(A NUMBER);
5,小表先插入数据,不收集统计信息,然后TRUNCATE,查看用时多少
-----------------不统计信息
--1,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_MIDDLE VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 00.12
--2,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
已用时间: 00: 00: 00.04
-----------------统计信息
--1,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
--2,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_MIDDLE VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 00.03
--3,收集统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T_MIDDLE');
已用时间: 00: 00: 03.08
--4,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
已用时间: 00: 00: 00.03
小结:对于小表,收集不收集统计信息,对于TRUNCATE性能影响没什么明显区别
---------------------------------------------------------
中表先插入数据,不收集统计信息,然后TRUNCATE,查看用时多少
-----------------不统计信息
--1,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_MIDDLE VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 00.11
--2,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
已用时间: 00: 00: 00.07
-----------------统计信息
--1,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
--2,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_MIDDLE VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 00.12
--3,收集统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T_MIDDLE');
已用时间: 00: 00: 00.09
--4,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
已用时间: 00: 00: 00.06
小结:对于中型数据量,收不收集统计对于TRUNCATE无明显区别
----------------------------------------------------------
大表先插入数据,不收集统计信息,然后TRUNCATE,查看用时多少
-----------------不统计信息
--1,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_BIG VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 17.99
--2,TRUNCATE表
TRUNCATE TABLE T_BIG;
已用时间: 00: 00: 40.08
-----------------统计信息
--1,TRUNCATE表
TRUNCATE TABLE T_BIG;
--2,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_BIG VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 18.14
--3,收集统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T_BIG');
已用时间: 00: 00: 01.12
--4,TRUNCATE表
TRUNCATE TABLE T_BIG;
已用时间: 00: 00: 41.48
小结:对于大表,是否收集统计对于INSERT性能无明显区别
总结:TRUNCATE操作之前无须收集表的统计
1,以小,中,大数据量为基础,各测不收集统计进行INSERT的时间与收集统计进行INSERT的时间差异
2,小表为1000,中表为100000,大表为10000000
3,小表表名为T_MIDDLE
中表表名为T_MIDDLE
大表表名为T_BIG
三表列一样,皆是A NUMBER
4,构建小中大表
CREATE TABLE T_MIDDLE(A NUMBER);
CREATE TABLE T_MIDDLE(A NUMBER);
CREATE TABLE T_BIG(A NUMBER);
5,小表先插入数据,不收集统计信息,然后TRUNCATE,查看用时多少
-----------------不统计信息
--1,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_MIDDLE VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 00.12
--2,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
已用时间: 00: 00: 00.04
-----------------统计信息
--1,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
--2,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_MIDDLE VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 00.03
--3,收集统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T_MIDDLE');
已用时间: 00: 00: 03.08
--4,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
已用时间: 00: 00: 00.03
小结:对于小表,收集不收集统计信息,对于TRUNCATE性能影响没什么明显区别
---------------------------------------------------------
中表先插入数据,不收集统计信息,然后TRUNCATE,查看用时多少
-----------------不统计信息
--1,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_MIDDLE VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 00.11
--2,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
已用时间: 00: 00: 00.07
-----------------统计信息
--1,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
--2,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_MIDDLE VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 00.12
--3,收集统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T_MIDDLE');
已用时间: 00: 00: 00.09
--4,TRUNCATE表
TRUNCATE TABLE T_MIDDLE;
已用时间: 00: 00: 00.06
小结:对于中型数据量,收不收集统计对于TRUNCATE无明显区别
----------------------------------------------------------
大表先插入数据,不收集统计信息,然后TRUNCATE,查看用时多少
-----------------不统计信息
--1,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_BIG VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 17.99
--2,TRUNCATE表
TRUNCATE TABLE T_BIG;
已用时间: 00: 00: 40.08
-----------------统计信息
--1,TRUNCATE表
TRUNCATE TABLE T_BIG;
--2,编写PLSQL块
DECLARE
TYPE TYP_TAB_V_UPPER IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
V_UPPER TYP_TAB_V_UPPER;
V_END PLS_INTEGER:=&END;
BEGIN
FOR I IN 1..V_END LOOP
V_UPPER(I):=I;
END LOOP;
FORALL I IN 1..V_END
INSERT INTO T_BIG VALUES(V_UPPER(I));
COMMIT;
END;
已用时间: 00: 00: 18.14
--3,收集统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T_BIG');
已用时间: 00: 00: 01.12
--4,TRUNCATE表
TRUNCATE TABLE T_BIG;
已用时间: 00: 00: 41.48
小结:对于大表,是否收集统计对于INSERT性能无明显区别
总结:TRUNCATE操作之前无须收集表的统计
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-743430/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-743430/