要辞职了,总是无比轻松,于是今天闲着做了做1z0-042的题库,其中有一个关于truncate的,正确答案是truncate可以产生很少的redo,实践出真实,我做个试验验证一下。
step1 建表
1 create table test as select * from dba_objects;
step2 统计出现在的redosize
select name, value from v$sysstat a where a.name = 'redo size';
记录下redo size:32378840。
step3 truncate该表,之后统计redo size
truncate table test1;
现在的redo size:32423748。
可以看出,redo size增长了:44908。
step4 删掉这张表,依上述法则重建,并且记录redo size。
1 drop table test1;
2 create table test1 as select * from dba_objects;
3 select name, value from v$sysstat a where a.name = 'redo size';
现在的redo size:32737804。
step5 用普通的办法删除,并记录redo size:
1 delete from test1;
2 commit; --commit本身不产生redo
3 select name, value from v$sysstat a where a.name = 'redo size';
现在的redo size:59415540。
与之前的记录数相减:26677736。
由此可见,使用truncate的好处就是可以产生非常少量的redo,因此其删除速度理论上讲,要高于delete。在这实验之前,我们按照甲方要求,清空了一张3G大的数据表,当时因为对truncate认识不足,认为会占用很长的时间,因此我已经做好了将电脑留在办公室跑一夜的打算,但是没想到一眨眼的功夫,这样表就被清空了,可惜当时没有记录下redo size的变化,不然现在拿出来也是一个很好的例证。
这就当作第一篇吧,以后还要慢慢的研究SQL和redo。