2007-01-11

关于Oracle数据库中索引的维护经验谈

来源: 本站收集整理 作者:佚名 评论 0 条
 

表中所有行在该列的不同值的数目:

  

  select

  column_name,

  num_distinct

  from user_tab_columns

  where table_name='表名'

  /
  

列的选择性=NUM_DISTINCT/表中所有行的总数,查询USER_TAB_COLUMNS有助测量每个列的选择性,但它并不能精确地测量列的并置组合的选择性。要想测量一组列的选择性,需要采用手工方法或者根据这组列创建一个索引并重新分析表。

四. 确定索引的实际碎片

随着数据库的使用,不可避免地对基本表进行插入,更新和删除,这样导致叶子行在索引中被删除,使该索引产生碎片。插入删除越频繁的表,索引碎片的程度也越高。碎片的产生使访问和使用该索引的I/O成本增加。碎片较高的索引必须重建以保持最佳性能。

(1)利用验证索引命令对索引进行验证。

这将有价值的索引信息填入index_stats表。

  

  validate index 用户名.索引名

  /

  

(2)查询index_stats表以确定索引中删除的、未填满的叶子行的百分比。

  

  select

  name,

  del_lf_rows,

  lf_rows,

  round((del_lf_rows/(lf_rows 0.0000000001))*100) "Frag Percent"

  from index_stats

  /

  

(3)假如索引的叶子行的碎片超过10%,考虑对索引进行重建。

  

  alter index 用户名.索引名 rebuild

  tablespace 表空间名

  storage(initial 初始值 next 扩展值)

  nologging

  /

  

(4)假如出于空间或其他考虑,不能重建索引,可以整理索引。

  

  alter index用户名.索引名 coalesce

  /

 

(5)清除分析信息


(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:精华推荐:Oracle数据库业务优化心得  
下一篇:在数据字典中直接修改Oracle表列名
    评论加载中…
  

  analyze index 用户名.索引名

  delete statistics

  /
共4页: 上一页 [1] [2] 3 [4] 下一页
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号