注意:本实验只适用于单用户而且是单事务
首先创建一个表
SQL> create table t as select object_name unindexed,object_name indexed from all_objects;
Table created.
创建索引
SQL> create index t_idx on t(indexed);
查看目前事务已用undo块的个数
SQL> select used_ublk from v$transaction where addr=(select taddr from v$session where sid=(select sid from v$mystat where rownum=1));
上面应该是没记录的。
A:更新无索引的列
SQL> update t set unindexed = lower(unindexed);
49403 rows updated.
然后再执行查看
SQL> select used_ublk from v$transaction where addr=(select taddr from v$session where sid=(select sid from v$mystat where rownum=1));
USED_UBLK
----------
831
此UPDATE使用了831个块来存储其undo
B:更新有索引的列
SQL> update t set indexed = lower(indexed);
49403 rows updated.
SQL> select used_ublk from v$transaction where addr=(select taddr from v$session where sid=(select sid from v$mystat where rownum=1));
USED_UBLK
----------
1235
很明显使用了索引产生的undo比没使用索引大多了,这是因为索引本身所困有的复杂性所造成的
此实验来自于TOM大师的编程艺术
阅读(643) | 评论(0) | 转发(0) |