oracle 索引比表大的情况测试

本文通过实验演示了在频繁更新操作下,数据库表的索引可能会出现膨胀现象,导致索引大小超过表本身的情况。文章提供了具体的SQL示例来创建表、建立索引并进行更新操作,展示了索引膨胀的过程及通过rebuild操作来恢复索引到正常状态的方法。

--有一些时候发现某些表的索引大小会超出表的大小,而且索引字段比表字段少很多,

怀疑是对表的更新导致。


--测试索引比表大的情况



create table t_index(id ,name,owner,type) as select object_id , object_name,owner,object_type from dba_objects;

create index idx_t on t_index(id , name);


SQL> create index idx_t on t_index(id , name);
 
Index created
 
SQL> 


SELECT SEGMENT_NAME,BYTES,BLOCKS FROM USER_SEGMENTS WHERE SEGMENT_NAME IN ('T_INDEX','IDX_T') ;


SEGMENT_NAME                                                                          BYTES     BLOCKS
-------------------------------------------------------------------------------- ---------- ----------
IDX_T                                                                               6291456        768
T_INDEX                                                                             8388608       1024
 
 


begin 
 for x in 1..100000 
   loop update t_index set id=id+0.1 where id=x; 
 end loop; 
 end; 



PL/SQL procedure successfully completed
 
SQL> commit;



SQL> ANALYZE INDEX IDX_T VALIDATE STRUCTURE ;
 
Index analyzed
 
SQL> analyze table T_INDEX compute statistics; 
 
Table analyzed
 
SQL> analyze index idx_t compute statistics; 
 
Index analyzed
 
SQL> 



SQL> SELECT SEGMENT_NAME,BYTES,BLOCKS FROM USER_SEGMENTS WHERE SEGMENT_NAME IN ('T_INDEX','IDX_T') ;
 
SEGMENT_NAME                                  BYTES     BLOCKS
---------------------------------------- ---------- ----------
T_INDEX                                     8388608       1024
IDX_T                                      10485760       1280
 
SQL> 


SQL> alter index idx_t rebuild;
 
Index altered
 
SQL> SELECT SEGMENT_NAME,BYTES,BLOCKS FROM USER_SEGMENTS WHERE SEGMENT_NAME IN ('T_INDEX','IDX_T') ;
 
SEGMENT_NAME                                  BYTES     BLOCKS
---------------------------------------- ---------- ----------
T_INDEX                                     8388608       1024
IDX_T                                       6291456        768
 

SQL> 


--结果:当数据update操作频繁,对index的维护会导致其占用空间过大,通过rebuild可以恢复到原始状态。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值