加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle 索引比表大的情况测试

发布时间:2020-12-12 14:51:16 所属栏目:百科 来源:网络整理
导读:--有一些时候发现某些表的索引大小会超出表的大小,而且索引字段比表字段少很多, 怀疑是对表的更新导致。 --测试索引比表大的情况 create table t_index(id,name,owner,type) as select object_id,object_name,object_type from dba_objects; create index

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

怀疑是对表的更新导致。


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



create table t_index(id,name,owner,type) as select object_id,object_name,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,'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,'IDX_T') ;

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

SQL>


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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读