有一个数据表,按照组合主键创建的唯一索引,今天查询了下,数据文件2.5G,索引7.8G感觉索引占用好多,想问下索引占用空间是怎么计算的,在线等

解决方案 »

  1.   

    select sum(bytes)/1024/1024 from user_segments
    where segment_name ='IDXName
      

  2.   

    我是想知道为什么会产生这么大的索引。我select a.leaf_blocks,b.blocks from dba_indexes a,dba_segments b where a.owner=b.owner and a.indexname =b.segment_name and index_name='**' 查询出来的leaf_blocks与dba_segments.blocks发现没什么释放的余地,想知道索引产生规则及占用这么多空间的原因
      

  3.   

    还有这个帖子,好几个月了...盼望解决下现在知道了delete数据的时候高水线不下降,索引不变小,重新建了一下索引果然小了很多,但是索引大小事怎么计算的还是不知道
      

  4.   

    analyze index IND_NAME validate structure;
    select used_space from index_stats
    where name='XXXX';
      

  5.   

    select lf_blks,br_blks,used_space,opt_cmpr_count,opt_cmpr_pctsave from index_stats;
    opt_cmpr_count是系统推荐的压缩列数,来减少索引占用空间和I/O,opt_cmpr_pctsave是压缩后可以节省的空间百分比
    使用alter index INDEX_NAME rebuild compress N; N即压缩列数
    来重建压缩索引
      

  6.   

    索引如果不压缩的话,就是将表中的索引相关字段按顺序进行储存,索引中的数据包含相关字段数据,及对应的记录的rowid。所占空间为它们所占用块的总大小