Oracle中索引的存储原理浅析
更新时间:2023-11-27 14:51:01 阅读量: 教育文库 文档下载
Oracle中索引的存储原理浅析
霍俊伟 明廷堂
(河南大学网络信息中心 河南 开封 475001)
摘要:本文从原理的角度简要介绍了Oracle中和索引存储相关的参数以及索引存储的方法。 关键词:索引块; 索引段; 平衡树 1. 前言
在Oracle数据库中,当用户创建索引时,Oracle 会自动地在表空间中创建索引段来存储索引的数据。用户可以通过以下方式控制索引段的空间分配和使用:
设置索引段的存储参数来控制如何为此索引段分配数据扩展
为索引段设置 PCTFREE 参数,来控制组成数据扩展的各个数据块的可用空间情况。
索引段使用的表空间既可以是索引所有者的默认表空间,也可以是在 CREATE INDEX 语句中指定的表空间。索引无需和其相关的表位于同一表空间中。相反,如果将索引与其相关表存储在不同磁盘上能够提升使用此索引的查询性能,因为此时 Oracle 能够并行地访问索引及表数据。
2. PCTFREE和PCTUSED参数
2.1 PCTFREE参数
PCTFREE 参数用来设置一个数据块中至少需要保留多少可用空间(百分比值),为数据块中已有数据更新时可能发生的数据量增长做准备。例如,当用户用 CREATE TABLE 语句创建表时指定了以下参数: PCTFREE 20
这个参数设定了此表对应的数据段中的每个数据块至少保留20%的可用空间,以备块中已有数据更新时使用。只要数据块中行数据区与数据块头的容量之和不超过数据块总容量的80%,用户就可以向其中插入新数据,数据行被放入行数据区,相关信息被写入数据块头。
2.2 PCTUSED 参数
PCTUSED 参数用于决定一个数据块是否可被用于插入新数据,她的依据是数据区与数据块头的容量之和占数据块全部容量的最大百分比。当一个数据块中的可用空间比例小于 PCTFREE参数的规定时,Oracle就认为此数据块无法被用于插入新数据,直到数据块中的占用容量比例小于 PCTUSED参数的限定。在占用容量比例大于 PCTUSED参数的限定之前,Oracle只在更新数据块内已有数据时才会使用此数据块的可用空间。例如,当用户用 CREATE TABLE 语句创建表时指定了以下参数: PCTUSED 40
在例子中,当此表的某数据块占用容量比例高于40%时,Oracle不会将此数据块用于插入新数据行。
3. 索引如何存储 3.1 索引块的格式
一个数据块内可用于存储索引数据的空间等于数据块容量减去数据块管理开销,索引条目管理开销,rowid,及记录每个索引值长度的1字节。
当用户创建索引时,Oracle 取得所有被索引列的数据并进行排序,之后将排序后索引值和与此值相对应的 rowid 按照从下到上的顺序加载到索引中。例如,以下语句:
CREATE INDEX employees_last_name ON employees(last_name);
Oracle 先将 employees 表按 last_name 列排序,再将排序后的 列及相应的 rowid 按从下到上的顺序加载到索引中。使用此索引时,Oracle 可以快速地搜索已排序的 last_name 值,并使用相应的 rowid 去定位包含用户所查找的 last_name 值的数据行。
3.2 索引的内部结构
Oracle 使用平衡树存储索引以便提升数据访问速度。当不使用索引时,用户必须对数据进行顺序扫描来查找指定的值。如果有 n 行数据,那么平均需要扫描的行为 n/2。因此当数据量增长时,这种方法的开销将显著增长。
如果将一个已排序的值列划分为多个区间,每个区间的末尾包含指向下个区间的指针,而搜索树中则保存指向每个区间的指针。此时在 n 行数据中查询一个值所需的时间为 log(n)。这就是 Oracle 索引的基本原理。
在一个平衡树索引中,最底层的索引块(叶块)存储了被索引的数据值,以及对应的 rowid。叶块之间以双向链表的形式相互连接。位于叶块之上的索引块被称为分支块,分枝块中包含了指向下层索引块的指针。如果被索引的列存储的是字符数据,那么索引值为这些字符数据在当前数据库字符集中的二进制值。
对于唯一索引,每个索引值对应着唯一的一个 rowid。对于非唯一索引,每个索引值对应着多个已排序的 rowid。因此在非唯一索引中,索引数据是按照索引键及 rowid 共同排序的。键值全部为 NULL 的行不会被索引,只有簇索引例外。在数据表中,如果两个数据行的全部键值都为 NULL,也不会与唯一索引相冲突。
3.3 索引的属性
有两种类型的索引块:
用于搜索的分支块 用于存储索引数据的叶块
(1) 分支块
分支块中存储以下信息:
最小的键值前缀,用于在本块的两个键值之间做出分支选择 指向包含所查找键值的子块的指针
包含 n 个键值的分支块含有 n+1 个指针。键值及指针的数量同时还受索引块容量的限制。 (2) 叶块
所有叶块相对于其根分支块的深度是相同的。叶块用于存储以下信息:
数据行的键值
键值对应数据行的 ROWID
所有的键值-ROWID 对都与其左右的兄弟节点向链接,并按照(key,ROWID)的顺序排序。
3.4 平衡树结构的优势
平衡树数据结构具有以下优势:
平衡树内所有叶块的深度相同,因此获取索引内任何位置的数据所需的时间大致相同。 平衡树索引能够自动保持平。
平衡树内的所有块容量平均在总容量的 3/4 左右。
在大区间范围内进行查询时,无论匹配个别值还是搜索一个区间,平衡树都能提供较好的查
询性能。
数据插入,更新,及删除的效率较高,且易于维护键值的顺序。
大型表,小型表利用平衡树进行搜索的效率都较好,且搜索效率不会因数据增长而降低。
参考文献:
[1]赵伯山 Oracle 9i中文版实用培训教程[M]. 清华大学出版社 2002 [2]冯凤娟 Oracle数据库体系结构和管理[M]. 清华大学出版社,2003
正在阅读:
Oracle中索引的存储原理浅析11-27
语文人教版五年级下册预习单10-08
愚人节活动策划案05-25
宝宝出生前必备物品购物指南10-12
怎样把绩效管理制度化11-05
聚合物材料的力学性能05-11
高职高专院校人才培养工作水平评估方案07-28
小学生演出优秀作文06-15
学习张家港精神体会05-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 浅析
- 索引
- 原理
- 存储
- Oracle
- 北师大版小学语文五年级下册课内阅读题 全册精品
- 省 级 教 学 成 果 推 荐 书(简化版) - 图文
- 模拟电子技术基础试卷3答案
- 江大工程材料练习题四
- 中国地下空间发展现状与展望
- 初中信息技术课堂有效导入的尝试(20170713)
- 课程习题-国际贸易实务
- 2016年温州中学自主招生数学模拟试卷及参考答案 - 图文
- VBA入门指南—如何看懂代码
- 九年级历史上册第4课希腊城邦和亚历山大帝国教案新人教版
- 《NO.7信令系统》复习资料 - 图文
- 文献综述
- CMZ100旋转冲击型液压锚杆钻机液压系统设计计算说明书
- 县人民法院多举措做好裁判文书上网工作
- 中央空调多联机施工方案
- 金融学货币银行学试题库及答案
- 大连市杰出企业家名单:
- 选修六世界文化遗传荟萃练习精编 - 图文
- 水文预报习题集
- 2007年6月福建省普通高中信息技术学生学业基础会考试卷(含答案)