专栏首页bisal的个人杂货铺《Oracle Concept》第三章 - 7

《Oracle Concept》第三章 - 7

背景:

按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。

本文主题:第三章《Indexes and Index-Organized Tables》 - Overview of Indexes。

索引聚簇因子

索引聚簇因子衡量的是一个索引键值反映到数据表中行的顺序,例如雇员last name字段。索引反映到数据表中行的存储顺序越接近,聚簇因子的值就会越小。

聚簇因子可以粗略衡量通过索引读取表中数据所需要的IO数量:

  • 如果聚簇因子值很高,Oracle在执行一个大索引的范围扫描时,就会消耗较高的IO。索引键会指向任意的表块,因此数据库通过索引读取数据的时候,可能就会反复地读取相同的数据块。
  • 如果聚簇因子值很低,Oracle在执行一个大索引的范围扫描时,就会消耗较低的IO。在同一个范围内的索引键值可能会指向相同的数据块,因此数据库不需要反复读取相同的数据块。

聚簇因子和索引扫描相关,因为他能展示:

  • 数据库是否会使用索引范围扫描。
  • 和索引相关的表中数据组织程度。
  • 如果必须根据索引键值进行行排序,是否考虑使用索引组织表、分区表或者表簇。

例如,假设employees表占用两个数据块。表3-1描述了两个数据块中的行(省略号表示数据未显示),

行是按照last name(粗体字)的顺序存储的。例如,数据块1的最后一行,是Abel,往上的下一行是Ande,按照英文字母的顺序,直到数据块1的第一行Steven King。数据块2的最后一行是Kochar,往上的下一行是Kumar,按照英文字母的顺序,直到数据块2的第一行Zlotkey。

假设last name列存在索引,每个键值都会对应到一个rowid。从概念上讲,索引键值像这样:

假设雇员ID列存在单独的索引。从概念上讲,索引可能像这样,雇员ID会分布在这两个块的任意位置:

示例3-2通过ALL_INDEXES视图检索这两个索引的聚簇因子值。EMP_NAME的聚簇因子值很低,他表示同一个叶子块中相邻的索引键值指向的数据行会位于相同的数据块中。EMP_EMP_ID_PK的聚簇因子值很高,他表示同一个叶子块中的相邻索引键值指向的数据行不太可能位于同一个数据块中。

关于聚簇因子的知识,可以参考:

一个执行计划异常变更的案例 - 外传之聚簇因子(Clustering Factor)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 探索索引的奥秘 - 有索引就一定会用么?

        2. 索引处于unusable期间,对表数据做DML操作,此时不维护索引。

    bisal
  • 《Oracle Concept》第三章 - 1

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bisal/article/details/90206...

    bisal
  • 一个索引热块的性能问题

    某个核心应用,开发反馈业务高峰期的时候,有三张表的INSERT插入操作会出现用时较长的情况,通过日志定位,认为就是数据库操作的问题。

    bisal
  • 一个执行计划异常变更的案例 - 外传之聚簇因子(Clustering Factor)

    编辑手记:一条SQL的执行计划异常变更,在深入分析的过程中,发现其涉及到的知识点非常之多,于是整个问题都变得错综复杂。前面介绍了绑定变量及其窥探方面的知识,今天...

    数据和云
  • Java类文件的结构

     Class文件是以8位字节为基础单位的二进制流,各部分中间没有分隔符。遇到8位字节以上的空间数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。

    爱撸猫的杰
  • 面试题:Redis 和 memcached 有什么区别?

    redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?

    用户1263954
  • ELK总结——第三篇Logstash监控Nginx日志存入redis,实现服务解耦

    为了节省资源,博主这里只搭建了一台,只有一台主的服务器。端口:6301密码:rds6301_paswd

    胡齐
  • redis 和 memcached 有什么区别?为什么 redis 单线程却能支撑高并发?

    redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。

    IT技术小咖
  • Lucene 基础

    Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apac...

    王念博客
  • Elasticsearch入门

    Elasticsearch是一个高度可扩展的、开源的、基于 Lucene 的全文搜索和分析引擎。它允许您快速,近实时地存储,搜索和分析大量数据,并支持多租户。

    爱撸猫的杰

扫码关注云+社区

领取腾讯云代金券