重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5004|回复: 0
打印 上一主题 下一主题

索引碎片识别及消除

[复制链接]
跳转到指定楼层
楼主
发表于 2012-10-8 10:03:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

      对建有索引的表频繁进行dml操作,会产生索引碎片,意味着对索引进行扫描时,需要读取更多的block,影响执行效率,如果碎片比较大,并且可能会影响到执行计划的准确性。可以采用下面的方法对索引碎片做评估及消除。

 

1、识别索引碎片

     计算公式: 索引碎片度 = 删除的索引叶子数 / 总的索引叶子数 * 100%

     为保障准确性,先对索引做分析:

     ANALYZE INDEX index_name VALIDATE STRUCTURE;

     查询index_stats字典表,得到索引碎片度:

    SELECT name, del_lf_rows/lf_rows*100 reclaimable_space_pct FROM index_stats; 

    

2、如果索引碎片度超过20%,可以考虑重建索引

     需要先检查重建索引的表空间空间是否足够;

     重建索引:

     alter index 用户名.索引名 rebuild  tablespace 表空间名  storage(initial 初始值 next 扩展值)  nologging

     如果不加tablespace参数,索引会重建到用户默认表空间;

     如果表空间空间不够,无法重建索引,可以通过对索引进行整理来消除碎片:

     如果空间不够,可以整理索引:
     alter index用户名.索引名 coalesce

3、表空间碎片整理

     因为重建索引会删除索引,对于较大的索引而言,会造成表空间碎片,所以重建索引后,可以考虑整理表空间:
     alter tablespace 表空间名 coalesce

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-6-18 20:26 , Processed in 0.089514 second(s), 21 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表