前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Oracle Concept》第三章 - 7

《Oracle Concept》第三章 - 7

作者头像
bisal
发布2019-06-21 13:04:52
3300
发布2019-06-21 13:04:52
举报

背景:

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

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

索引聚簇因子

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

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

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

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

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

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

640?wx_fmt=png
640?wx_fmt=png

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

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

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年06月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档