Oracle数据库索引维护.docVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle数据库索引维护

Oracle数据库索引维护 本文由bd_win贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 Oracle 数据库索引的维护 发布:dxy 字体:[增加 减小] 类型:转载 正在看的 ORACLE 教程是:Oracle 数据库索引的维护。 本文只讨论 Oracle 中最常见的索引,即是 B-tree 索引。本文中涉及的数据库 版本是 Oracle8i。 一. 查看系统表中的用户索引 在 Oracle 中,SYSTEM 表是安装数据库时自动建立的,它包含数据库的全 部数据字典,存储过程、包、函数与触发器的定义以及系统回滚段。 一般来说,应该尽量避免在 SYSTEM 表中存储非 SYSTEM 用户的对象。 因为这样会带来数据库维护与管理的很多问题。一旦 SYSTEM 表损坏了,只能 重新生成数据库。我们可以用下面的语句来检查在 SYSTEM 表内有没有其他用 户的索引存在。 二. 索引的存储情况检查 Oracle 为数据库中的所有数据分配逻辑结构空间。数据库空间的单位是数 据块(block)、范围(extent)与段(segment)。 Oracle 数据块(block)是 Oracle 使用与分配的最小存储单位。它是由数据 库建立时设置的 DB_BLOCK_SIZE 决定的。一旦数据库生成了,数据块的大小 不能改变。要想改变只能重新建立数据库。(在 Oracle9i 中有一些不同,不过 这不在本文讨论的范围内。) Extent 是由一组连续的 block 组成的。一个或多个 extent 组成一个 segme nt。当一个 segment 中的所有空间被用完时,Oracle 为它分配一个新的 extent。 Segment 是由一个或多个 extent 组成的。它包含某表空间中特定逻辑存储 结构的所有数据。一个段中的 extent 可以是不连续的,甚至可以在不同的数据 文件中。 一个 object 只能对应于一个逻辑存储的 segment,我们通过查看该 segme nt 中的 extent,可以看出相应 object 的存储情况。 (1)查看索引段中 extent 的数量: (2)查看表空间内的索引的扩展情况: 三. 索引的选择性 索引的选择性是指索引列中不同值的数目和表中记录数的比。 如果一个表中 有 2000 条记录,表索引列有 1980 个不同的值,那么这个索引的选择性就是 19 80/2000=0.99。 一个索引的选择性越接近于 1,这个索引的效率就越高。 如果是使用基于 cost 的最优化,优化器不应该使用选择性不好的索引。如 果是使用基于 rule 的最优化,优化器在确定执行路径时不会考虑索引的选择性 (除非是唯一性索引),并且不得不手工优化查询以避免使用非选择性的索引。 确定索引的选择性,可以有两种方法:手工测量与自动测量。 (1)手工测量索引的选择性 如果要根据一个表的两列创建两列并置索引, 可以用以下方法测量索引的选 择性: 列的选择性=不同值的数目/行的总数 /* 越接近 1 越好 */ 如果我们知道其中一列索引的选择性(例如其中一列是主键),那么我们就 可以知道另一列索引的选择性。 手工方法的优点是在创建索引前就能评估索引的选择性。 (2)自动测量索引的选择性 如果分析一个表,也会自动分析所有表的索引。 第一,为了确定一个表的确定性,就要分析表。 第二,确定索引里不同关键字的数目: 第三,确定表中行的总数: 第四,索引的选择性=索引里不同关键字的数目/表中行的总数: 第五,可以查询 USER_TAB_COLUMNS 以了解每个列的选择性。 表中所有行在该列的不同值的数目: 列的选择性=NUM_DISTINCT/表中所有行的总数,查询 USER_TAB_COL UMNS 有助测量每个列的选择性,但它并不能精确地测量列的并置组合的选择 性。要想测量一组列的选择性,需要采用手工方法或者根据这组列创建一个索引 并重新分析表。 四. 确定索引的实际碎片 随着数据库的使用,不可避免地对基本表进行插入,更新与删除,这样导致 叶子行在索引中被删除,使该索引产生碎片。插入删除越频繁的表,索引碎片的 程度也越高。碎片的产生使访问与使用该索引的 I/O 成本增加。碎片较高的索引 必须重建以保持最佳性能。 (1)利用验证索引命令对索引进行验证。 这将有价值的索引信息填入 index_stats 表。 (2)查询 index_stats 表以确定索引中删除的、未填满的叶子行的百分比。 (3)如果索引的叶子行的碎片超过 10%,考虑对索引进行重建。 (4)如果出

文档评论(0)

htfyzc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档