普通表与临时表DML操作会产生REDO/UNDO对比与分析(四)
0534128
COMMIT语句:产生REDO/UNDO分别为: 1346 和0
四:两次操作产生的REDO/UNDO大小对比
普通表统计情况如下:
create table test1 as select * from dba_objects where 1=0;语句:产生REDO/UNDO分别为: 236780 6736
insert into test1 select * from dba_objects;语句:产生REDO/UNDO分别为: 813686048 约775.99M 30669256
COMMIT语句:产生REDO/UNDO分别为:236和0
ON COMMIT DELETE ROWS 临时表统计情况如下:
create global temporary table temp1语句: 产生REDO和UNDO分别为: 24448 6528
insert into temp1 select * from dba_objects;语句:产生REDO和UNDO分别为:43227808 约41M 30534128
COMMIT语句:产生REDO/UNDO分别为: 1346 和0
总结:临时表的建立和插入数据也产生REDO和UNDO。
建立临时表时因为修改了数据字典所以产生了少量REDO与UNDO;
提交时是在REDO中插入一条提交的标签,所以只产生少量REDO。
那么在插入数据时,临时表还是会产生REDO和UNDO,但是REDO量比普通表插入相同数据量时产生的REDO少很多,UNDO大小相近,这个是怎么解呢?
大致是因为:临时表产生了undo,而undo的变化又产生了REDO LOG, 所以临时表的DML操作也产生了REDO。
但是临时表产生的REDO的大小却比普通表DML操作的小,是因为临时表中不记录表中数据变化所产生的REDO,只记录了UNDO数据变化所产生的REDO。