Chinaunix首页 | 论坛 | 博客
  • 博客访问: 248565
  • 博文数量: 91
  • 博客积分: 2016
  • 博客等级: 大尉
  • 技术积分: 820
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-08 23:25
文章分类

全部博文(91)

文章存档

2011年(6)

2010年(6)

2009年(34)

2008年(45)

我的朋友

分类:

2009-05-26 00:03:11

注意:本实验只适用于单用户而且是单事务
 
首先创建一个表
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大师的编程艺术
阅读(708) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~