16 基本索引.pptVIP

  1. 1、本文档共71页,可阅读全部内容。
  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文档。上传文档
查看更多
16 基本索引

什么是Clustering Factor 呢?Clustering Factor是的含义是如果通过一个索引扫描一张表,需要访问的表的数据块的数量。Clustering Factor计算的方法如下: 1、扫描一个索引 2、比较某行的rowid和前一行的rowid,如果这两个rowid不属于同一个数据块,那么cluster factor增加1 3、整个索引扫描完毕后,就得到了该索引的cluster factor。 如果Clustering Factor接近于表存储的块数,说明这张表是按照索引字段的顺序存储的。如果Clustering Factor接近于行的数量,那说明这张表不是按索引字段顺序存储的。 在计算索引访问成本的时候,这个值十分有用。Clustering Factor乘以选择性参数(selectivity )就是访问索引的开销。 如果这个统计数据不能真实反映出索引的真实情况,那么可能会造成优化器错误的选择执行计划。 另外如果某张表上的大多数访问是按照某个索引做索引扫描,那么将该表的数据按照索引字段的顺序重新组织,可以提高该表的访问性能。 这个段分配了一个extent,因此这里面显示的是8blocks,不是实际的占用块数。 因此这个表占用的blocks是1个。 聚集因子的数量和表的块数一致,因此表的数据排序和索引一致,因此在进行索引范围扫描的时候,对表的访问成本还是比较低的。 聚集因子主要影响的是索引范围扫描。 如果聚集因子很高,那么建议对表进行重新整理,降低聚集因子。 二元高度(binary height) 索引查找分为两个过程: 1、根据树进行定位、找出ROWID(索引查找) 2、根据ROWID找出表中的数据行(表数据查找) 进行索引查找的时候,首先从树根开始读数据,通过中间节点,最后定位到叶节点,整个过程只能进行单数据块的读取。 索引 表 二元高度是3,读取一行数据经过了四次数据块的读取,其中三次是索引,一次是表数据。 查找每个索引的二元高度,这个索引只占用了一个数据块,因此二元高度是0 二元高度主要随着表中索引列的非NULL值以及索引列中值的宽度而变化。 如果索引列上大量的行被删除,那么他的二元高度不会降低,重建索引会降低二元高度,如果一个索引中被删除的行接近20~25%,重建索引会减低二元高度。 二元高度对索引的性能影响不是很大,但是在可能的情况下,降低二元高度还是有必要的。 使用直方图 在分析表和索引时,直方图用于记录数据的分布。 通过获取该信息,基于成本的优化器就可以决定使用将返回少量行的索引,而避免使用基于限制条件返回许多行的索引。 直方图的使用不受索引的限制,我们可以在表的任何列上构建直方图(一般是在表的索引列上构建直方图)。 构建直方图最主要的原因就是:帮助优化器在表中数据严重倾斜时做出更好的规划。 如果一个表中的列上(通常是索引列)数据发生严重的倾斜,那么在这个列上建立直方图将非常的有意义。这样优化器就知道什么时候该使用索引、什么时候不该使用索引。 在hr用户下面的employees表的job_id列上建立了一个直方图。 这个直方图有10个存储桶。 行数 10 10 10 10 10 10 10 10 10 10 1000-1300 1301-1400 1401-1430 1430-1500 1430 1430 1430 1430 1430 1430 对整个列的100行数据进行均分成10个存储桶,每个桶中存储10个数据行。 然后写出每个桶中的数据范围。 我们发现1430这个数值对应的行号数非常多,大约73行,占到了73%。 因此当我们使用where id=1403的时候,优化器不会走索引。 默认情况下,oracle的直方图会产生75个存储桶,可以把存储桶的size限制在1~254之间。 快速全局索引扫描 在索引的快速全局扫描期间,Oracle读取B树索引上的所有树叶块,这个索引可以按照顺序读取,这样可以一次读取多个块,初始化文件中的DB_FILE_MULTIBLOCK_READ_COUN T可以控制同时被读取的块数。 相对全表扫描,快速全局索引扫描通常需要较少的物理IO。 如果表查询的所有列都被包含在索引中,而索引的前置列并不在where条件中,就可以使用快速全局索引扫描。 select empno,ename,deptno from emp where deptno=30; empno,ename,deptno上有一个组合索引。 作为一个选择,针对上面的情况,Oracle可能采取跳跃式索引扫描。 跳跃式索引扫描 组合索引、where条件中没有出现前置列(通常是组合索引的第二列)。 相对全索引扫描,跳跃式索引扫描读取的数据块更少、速度更快。 读取的块数明显减少

文档评论(0)

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

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

版权声明书
用户编号:5132241303000003

1亿VIP精品文档

相关文档