0
点赞
收藏
分享

微信扫一扫

Oracle索引比表大


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

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

Table created.

SQL> create index idx_t1 on t1(id , name);

Index created.

SQL> begin
2 for i in 1..1000000
3 loop update t1 set id=id+0.1 where id=i;
4 end loop;
5 end;
6 /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> analyze index idx_t1 VALIDATE STRUCTURE;

Index analyzed.

SQL> analyze table t1 compute statistics;

Table analyzed.

SQL> analyze index idx_t1 compute statistics;

Index analyzed.

SQL> SELECT SEGMENT_NAME,BYTES,BLOCKS FROM USER_SEGMENTS WHERE SEGMENT_NAME IN ('T1','IDX_T1') ;

SEGMENT_NAME
--------------------------------------------------------------------------------
BYTES BLOCKS
---------- ----------
IDX_T1
9437184 1152

T1
5242880 640


SQL> alter index idx_t1 rebuild;

Index altered.

SQL> SELECT SEGMENT_NAME,BYTES,BLOCKS FROM USER_SEGMENTS WHERE SEGMENT_NAME IN ('T1','IDX_T1') ;

SEGMENT_NAME
--------------------------------------------------------------------------------
BYTES BLOCKS
---------- ----------
IDX_T1
5242880 640

T1
5242880 640

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux,oracle

举报

相关推荐

0 条评论