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可以恢复到原始状态。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |