第9章索引与索引组织表 索引是一种可选的数据结构,在一个表上是否建 立索引,这不会对表的使用方法产生任何影响。但是 如果在表中的某些字段上建立了索引,这能够显著地 提高对该表的查询速度。并且可以在很大程度上减少 查询时的硬盘/O操作。索引组织表(也称为OT)是 清率电脑学堂 种特殊的表,它将表中的数据以B树索引的方式来 组织表中的数据,利用索引组织表能够显著提高查询 的速度
1 第9章 索引与索引组织表 索引是一种可选的数据结构,在一个表上是否建 立索引,这不会对表的使用方法产生任何影响。但是 如果在表中的某些字段上建立了索引,这能够显著地 提高对该表的查询速度。并且可以在很大程度上减少 查询时的硬盘I/O操作。索引组织表(也称为IOT)是 一种特殊的表,它将表中的数据以B树索引的方式来 组织表中的数据,利用索引组织表能够显著提高查询 的速度
本章知识要点: 理解索引的作用原理 B树索引 位图索引 反向键索引 清率电脑学堂 基于函数的索引 对索引进行修改 索引组织表的优点 索引组织表的溢出存储
2 本章知识要点: • 理解索引的作用原理 • B树索引 • 位图索引 • 反向键索引 • 基于函数的索引 • 对索引进行修改 • 索引组织表的优点 • 索引组织表的溢出存储
9.1索引基础 工二工工工二工工工工工 如果一个表中包含有很多条记录,当对表执行查 询时,必须将所有的记录一一取出,以便将每一条记 录与查询条件进行比较,然后再返回满足条件的记录 。这样进行操作的时间开销和/O开销都是十分巨大 的。这时就可以考虑通过建立索引来减少开销。 清率电脑学堂
3 9.1 索引基础 • 如果一个表中包含有很多条记录,当对表执行查 询时,必须将所有的记录一一取出,以便将每一条记 录与查询条件进行比较,然后再返回满足条件的记录 。这样进行操作的时间开销和I/O开销都是十分巨大 的。这时就可以考虑通过建立索引来减少开销
9.2建立索引 建立索引是使用CREATE INDEX语句完成的。 般情况下,建立索引是由表的所有者完成的,如 果要以其他用户身份建立索引,则要求用户必须具 有CREATE ANY INDEX系统权限或者在相应表的 INDE对象权限。 清率电脑学堂
9.2 建立索引 • 建立索引是使用CREATE INDEX语句完成的。 一般情况下,建立索引是由表的所有者完成的,如 果要以其他用户身份建立索引,则要求用户必须具 有CREATE ANY INDEX系统权限或者在相应表的 INDEX对象权限。 4
9.2.1建立B树索引 B树索引是Oracle中默认的、最常用的索引类型。 B树索引是以B树结构组织并存放索引数据的。默认情 况下,B树索引中的数据是以升序方式排列的。如果表 包含的数据非常多,并且经常在WHERE子句中引用某 列或某几个列,则应该基于该列或该几个列建立B树索 清率电脑学堂 引。B树索引由根块、分支枝和叶块3部分组成,其中 主要数据都集中在叶子结点。 10011012 100110051009 101210161018 1005 ROWID 1009 ROWID 1012 ROWID 1016 ROWID 1018 ROWID 1006 ROWID 1010 ROWID 1013 ROWID 1019 RWID 1011 ROWID 88品 1017 RWID 1020 RWID
9.2.1 建立B树索引 • B树索引是Oracle中默认的、最常用的索引类型。 B树索引是以B树结构组织并存放索引数据的。默认情 况下,B树索引中的数据是以升序方式排列的。如果表 包含的数据非常多,并且经常在WHERE子句中引用某 列或某几个列,则应该基于该列或该几个列建立B树索 引。B树索引由根块、分支枝和叶块3部分组成,其中 主要数据都集中在叶子结点。 5 1001 1012 1001 1005 1009 1001 ROWID 1002 ROWID 1003 ROWID 1004 ROWID 1005 ROWID 1006 ROWID 1007 ROWID 1008 ROWID 1011 ROWID 1010 ROWID 1009 ROWID 1015 ROWID 1014 ROWID 1013 ROWID 1012 ROWID 1017 RWID 1016 ROWID 1020 RWID 1019 RWID 1018 ROWID 1012 1016 1018
9.2.2建立位图索引 索引的作用简单地说就是能够通过给定的索引列值 清 快速地找到对应的记录。在B树索引中,通过在索引中 保存排过序的索引列的值,以及记录的物理地址ROWID 电 来实现快速查找。但是对于一些特殊的表,B树索引的效 脑 率可能会很低。 学堂 Employees enam 位图男 图女 0 65372 65345 1位 5352 0
6 9.2.2 建立位图索引 • 索引的作用简单地说就是能够通过给定的索引列值 ,快速地找到对应的记录。在B树索引中,通过在索引中 保存排过序的索引列的值,以及记录的物理地址ROWID 来实现快速查找。但是对于一些特殊的表,B树索引的效 率可能会很低。 0 empno ename 刘丽 女 sex 65322 王宾 男 李明 男 王丽 女 65345 李遇 女 65352 李磊 女 Employees 位图男 1 1 0 0 0 ... 0 0 1 位图女 0 0 0
9.2.3建立反向键索引 在Oracle中,系统会自动为表的主键列建立索引, 这个默认的索引是普通的B树索引。通常,用户会希望 表的主键是一个自动增长的序列编号,这样的列就是所 谓的单调递增序列编号列。当在这种顺序递增的列上建 立普通的B树索引时,如果果表的数据量非常庞大,将 清率电脑学堂 导致索引数据分布不均。 10 10 ROWID 50 ROWID 20 ROWID 60 ROWID 30 ROWID 40 ROWID 70 ROWID
7 9.2.3 建立反向键索引 • 在Oracle中,系统会自动为表的主键列建立索引, 这个默认的索引是普通的B树索引。通常,用户会希望 表的主键是一个自动增长的序列编号,这样的列就是所 谓的单调递增序列编号列。当在这种顺序递增的列上建 立普通的B树索引时,如果果表的数据量非常庞大,将 导致索引数据分布不均。 10 50 10 ROWID 20 ROWID 30 ROWID 40 ROWID 50 ROWID 60 ROWID 70 ROWID
9.2.4基于函数的索引 用户在使用Oracle数据库时,最常遇到问题之一就 是它对字符大小写敏感。如果在EMP表中,存储的雇 员姓名为SMTH,则用户使用小写搜索时,将无法找 到该行记录。如果用户不能够确定输入数据的格式,那 么就会产生一个严重的错误。 清率电脑学堂
9.2.4 基于函数的索引 • 用户在使用Oracle数据库时,最常遇到问题之一就 是它对字符大小写敏感。如果在EMP表中,存储的雇 员姓名为SMITH,则用户使用小写搜索时,将无法找 到该行记录。如果用户不能够确定输入数据的格式,那 么就会产生一个严重的错误。 8
9.3修改索引 修改索引是使用ALTER INDEX命令完成的。一般 情况下,修改索引是由索引的所有者完的,如果要以 其他用户身份修改索引,则要求该用户必须具有 ALTER ANY INDEX系统权限或在相应表上的INDEX 对象权限。 清率电脑学堂
9.3 修改索引 • 修改索引是使用ALTER INDEX命令完成的。一般 情况下,修改索引是由索引的所有者完的,如果要以 其他用户身份修改索引,则要求该用户必须具有 ALTER ANY INDEX系统权限或在相应表上的INDEX 对象权限。 9
9.3.1合并索引和重建索引 在为表建立索引后,随着对表不断进行更新、插 入和删除操作,索引中将会产生越来越多的存储碎片 这对索引的工作效率会产生负面影响。这时用户可 以采取两种方式来清楚碎片一重建索引或合并索引 。 合并索引只是将B树中叶子节点的存储碎片合并在 清率电脑学堂 起,并不会改变索引的物理组织结构。 合并前 合并后
10 9.3.1 合并索引和重建索引 • 在为表建立索引后,随着对表不断进行更新、插 入和删除操作,索引中将会产生越来越多的存储碎片 ,这对索引的工作效率会产生负面影响。这时用户可 以采取两种方式来清楚碎片——重建索引或合并索引 。合并索引只是将B树中叶子节点的存储碎片合并在一 起,并不会改变索引的物理组织结构。 合并前 合并后