oracle中索引的存储原理浅析

oracle中索引的存储原理浅析

ID:5767379

大小:38.00 KB

页数:3页

时间:2017-12-24

oracle中索引的存储原理浅析_第1页
oracle中索引的存储原理浅析_第2页
oracle中索引的存储原理浅析_第3页
资源描述:

《oracle中索引的存储原理浅析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Oracle中索引的存储原理浅析霍俊伟 明廷堂(河南大学网络信息中心河南开封475001) 摘要:本文从原理的角度简要介绍了Oracle中和索引存储相关的参数以及索引存储的方法。关键词:索引块;索引段;平衡树 1.前言   在Oracle数据库中,当用户创建索引时,Oracle会自动地在表空间中创建索引段来存储索引的数据。用户可以通过以下方式控制索引段的空间分配和使用:·设置索引段的存储参数来控制如何为此索引段分配数据扩展·为索引段设置PCTFREE参数,来控制组成数据扩展的各个数据块的可用空间

2、情况。   索引段使用的表空间既可以是索引所有者的默认表空间,也可以是在CREATEINDEX语句中指定的表空间。索引无需和其相关的表位于同一表空间中。相反,如果将索引与其相关表存储在不同磁盘上能够提升使用此索引的查询性能,因为此时Oracle能够并行地访问索引及表数据。2.PCTFREE和PCTUSED参数2.1PCTFREE参数   PCTFREE参数用来设置一个数据块中至少需要保留多少可用空间(百分比值),为数据块中已有数据更新时可能发生的数据量增长做准备。例如,当用户用CREATETAB

3、LE语句创建表时指定了以下参数:PCTFREE20   这个参数设定了此表对应的数据段中的每个数据块至少保留20%的可用空间,以备块中已有数据更新时使用。只要数据块中行数据区与数据块头的容量之和不超过数据块总容量的80%,用户就可以向其中插入新数据,数据行被放入行数据区,相关信息被写入数据块头。 2.2PCTUSED参数   PCTUSED参数用于决定一个数据块是否可被用于插入新数据,她的依据是数据区与数据块头的容量之和占数据块全部容量的最大百分比。当一个数据块中的可用空间比例小于PCTFREE

4、参数的规定时,Oracle就认为此数据块无法被用于插入新数据,直到数据块中的占用容量比例小于PCTUSED参数的限定。在占用容量比例大于PCTUSED参数的限定之前,Oracle只在更新数据块内已有数据时才会使用此数据块的可用空间。例如,当用户用CREATETABLE语句创建表时指定了以下参数:PCTUSED40   在例子中,当此表的某数据块占用容量比例高于40%时,Oracle不会将此数据块用于插入新数据行。 3.索引如何存储3.1索引块的格式   一个数据块内可用于存储索引数据的空间等于数

5、据块容量减去数据块管理开销,索引条目管理开销,rowid,及记录每个索引值长度的1字节。   当用户创建索引时,Oracle取得所有被索引列的数据并进行排序,之后将排序后索引值和与此值相对应的rowid按照从下到上的顺序加载到索引中。例如,以下语句:CREATEINDEXemployees_last_nameONemployees(last_name);    Oracle先将employees表按last_name列排序,再将排序后的 列及相应的rowid按从下到上的顺序加载到索引中。使用此索

6、引时,Oracle可以快速地搜索已排序的last_name值,并使用相应的rowid去定位包含用户所查找的last_name值的数据行。 3.2索引的内部结构   Oracle使用平衡树存储索引以便提升数据访问速度。当不使用索引时,用户必须对数据进行顺序扫描来查找指定的值。如果有n行数据,那么平均需要扫描的行为n/2。因此当数据量增长时,这种方法的开销将显著增长。如果将一个已排序的值列划分为多个区间,每个区间的末尾包含指向下个区间的指针,而搜索树中则保存指向每个区间的指针。此时在n行数据中查询一

7、个值所需的时间为log(n)。这就是Oracle索引的基本原理。   在一个平衡树索引中,最底层的索引块(叶块)存储了被索引的数据值,以及对应的rowid。叶块之间以双向链表的形式相互连接。位于叶块之上的索引块被称为分支块,分枝块中包含了指向下层索引块的指针。如果被索引的列存储的是字符数据,那么索引值为这些字符数据在当前数据库字符集中的二进制值。对于唯一索引,每个索引值对应着唯一的一个rowid。对于非唯一索引,每个索引值对应着多个已排序的rowid。因此在非唯一索引中,索引数据是按照索引键及r

8、owid共同排序的。键值全部为NULL的行不会被索引,只有簇索引例外。在数据表中,如果两个数据行的全部键值都为NULL,也不会与唯一索引相冲突。 3.3索引的属性   有两种类型的索引块:·用于搜索的分支块·用于存储索引数据的叶块(1)分支块   分支块中存储以下信息:·最小的键值前缀,用于在本块的两个键值之间做出分支选择·指向包含所查找键值的子块的指针   包含n个键值的分支块含有n+1个指针。键值及指针的数量同时还受索引块容量的限制。(2)叶块   所有叶块相对于其根分支块的深度是相同的。叶

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。