第09章索引与索引组织表.ppt
文本预览下载声明
* 第9章 索引与索引组织表 索引是一种可选的数据结构,在一个表上是否建立索引,这不会对表的使用方法产生任何影响。但是如果在表中的某些字段上建立了索引,这能够显著地提高对该表的查询速度。并且可以在很大程度上减少查询时的硬盘I/O操作。索引组织表(也称为IOT)是一种特殊的表,它将表中的数据以B树索引的方式来组织表中的数据,利用索引组织表能够显著提高查询的速度。 * 本章知识要点: 理解索引的作用原理 B树索引 位图索引 反向键索引 基于函数的索引 对索引进行修改 索引组织表的优点 索引组织表的溢出存储 * 9.1 索引基础 如果一个表中包含有很多条记录,当对表执行查询时,必须将所有的记录一一取出,以便将每一条记录与查询条件进行比较,然后再返回满足条件的记录。这样进行操作的时间开销和I/O开销都是十分巨大的。这时就可以考虑通过建立索引来减少开销。 9.2 建立索引 建立索引是使用CREATE INDEX语句完成的。一般情况下,建立索引是由表的所有者完成的,如果要以其他用户身份建立索引,则要求用户必须具有CREATE ANY INDEX系统权限或者在相应表的INDEX对象权限。 * 9.2.1 建立B树索引 B树索引是Oracle中默认的、最常用的索引类型。B树索引是以B树结构组织并存放索引数据的。默认情况下,B树索引中的数据是以升序方式排列的。如果表包含的数据非常多,并且经常在WHERE子句中引用某列或某几个列,则应该基于该列或该几个列建立B树索引。B树索引由根块、分支枝和叶块3部分组成,其中主要数据都集中在叶子结点。 * * 9.2.2 建立位图索引 索引的作用简单地说就是能够通过给定的索引列值,快速地找到对应的记录。在B树索引中,通过在索引中保存排过序的索引列的值,以及记录的物理地址ROWID来实现快速查找。但是对于一些特殊的表,B树索引的效率可能会很低。 * 9.2.3 建立反向键索引 在Oracle中,系统会自动为表的主键列建立索引,这个默认的索引是普通的B树索引。通常,用户会希望表的主键是一个自动增长的序列编号,这样的列就是所谓的单调递增序列编号列。当在这种顺序递增的列上建立普通的B树索引时,如果果表的数据量非常庞大,将导致索引数据分布不均。 9.2.4 基于函数的索引 用户在使用Oracle数据库时,最常遇到问题之一就是它对字符大小写敏感。如果在EMP表中,存储的雇员姓名为SMITH,则用户使用小写搜索时,将无法找到该行记录。如果用户不能够确定输入数据的格式,那么就会产生一个严重的错误。 * 9.3 修改索引 修改索引是使用ALTER INDEX命令完成的。一般情况下,修改索引是由索引的所有者完的,如果要以其他用户身份修改索引,则要求该用户必须具有ALTER ANY INDEX系统权限或在相应表上的INDEX对象权限。 * * 9.3.1 合并索引和重建索引 在为表建立索引后,随着对表不断进行更新、插入和删除操作,索引中将会产生越来越多的存储碎片,这对索引的工作效率会产生负面影响。这时用户可以采取两种方式来清楚碎片——重建索引或合并索引。合并索引只是将B树中叶子节点的存储碎片合并在一起,并不会改变索引的物理组织结构。 * 9.3.2 删除索引 删除索引是使用DROP INDEX语句完成的。一般情况下,删除索引是由索引所有者完成的,如果以其他用户身份删除索引,则要求该用户必须具有DROP ANY INDEX系统权限或在相应表上的INDEX对象权限。通常在如下情况下需要删除某个索引: 该索引不再需要时,应该删除该索引,以释放其所占用的空间。 如果移动了表中的数据,导致索引中包含过多的存储碎片,此时需要删除并重建索引。 通过一段时间的监视,发现很少有查询会使用到该索引。 9.3.3 显示索引信息 索引是用于加速数据存储的数据库对象。通过查询数据字典视图DBA_INDEXES,可以显示数据库的所有索引;通过查询数据字典视图ALL_INDEXES,可以显示当前用户可访问的所有索引;查询数据字典视图USER_INDEXES,可以显示当前用户的索引信息。下面以显示SCOTT用户EMP表的所有索引为例,说明使用数据字典视图DBA_INDEXES的方法: * SQL connect system/password 已连接。 SQL select index_name,index_type,uniqueness 2 from dba_indexes 3 where owner=SCOTT and table_name=EMP; IN
显示全部