oracle dba 培训教程 第11章 索引的管理与维护

来源:互联网 发布:2016移动支付数据 编辑:程序博客网 时间:2024/04/30 02:55

为什么要引入索引

为了加快查询的速度

索引对查询语句的影响

能够加快查询速度

索引对DML语句的影响

当对表进行DML操作时,oracle服务器将自动维护基于该表的全部索引,维护方法如下

!当对表进行插入操作时,在对应的索引数据块中插入一行索引项

!当对表进行删除时,oralce服务器仅对索引项进行逻辑删除操作,即仅在所删除的索引上加一个标记,并不是真正的删除该项,只有等该块中所有的项都被删除后才真正地删除它们

!当对表进行删除操作时,服务器实际上对索引进行的是两个操作,一个是逻辑删除,一个是插入操作

索引的逻辑分类

!单列索引

!多列索引

!唯一索引

!非唯一索引

!基于函数的索引

索引的物理分类

!分区或非分区索引

B-树索引

!位图索引

B-树索引的结构

索引顶端是根节点,该结点中包含的是存有指向索引中下一级指针的项,接下来是分枝结点,分支结点中的记录存的是指向下一级的指针,最底层为叶子结点,在叶子结点存有指向表中数据行的索引项。索引项是由三部分组成:索引项头,索引列长度和值,ROWID

B-树索引的应用范围

适合于联机事务处理系统,因为在联机事务处理系统中DML的操作较频繁。

位图索引的结构

位图索引也是一种B-树结构,只是位图索引的叶子结点存的不是ROWID而是每一个键值的位图。

位图索引的叶子结点包含了如下的部分:索引项头,键值,起始ROWID,终止ROWID,位图段。

位图索引的应用范围

适合于数据仓库系统,因为在数据仓库系统中表一般都较大但是静态的并且查询较为复杂。

B-树索引和位图索引的主要区别

!对于low-cardinality的列使用位图索引要比B-树索引紧凑得多,从而节省了大量的磁盘空间,同时也就减少了I/O,从而达到了提高系统效率的效果

!位图索引所需要的存储空间要比B-树索引小得多,所以Oracle服务器在使用位图索引时将整个位图索引段装入内存中。

B-树索引对关键字的修改相对位图索引来说不算昂贵,在位图索引中修改键值列(索引列)需要使用段一级的锁,而B-树索引使用的是行一级的锁,还有在这种情况下可能要调整位图。

!在对位图索引进行逻辑操作时,oracle服务器使用的是位操作,因此位图索引进行逻辑操作的效率是非常高的。

创建一个索引时应该考虑哪些问题

!平衡查询和DML的需要

!将其放入单独的表空间,不要与表,临时段,或还原段放在一个表空间中,因为索引段会与这些段竞争I/O

!使用统一的extent尺寸

!对大索引可考虑使用NOLOGGING

!索引的INITRANS参数通常应该比相对应表的高。

如何创建正常索引

Create index用户名.索引名

On 用户名.表名(列名)

如何创建位图索引

Create  bitmap index 用户名.索引名

On 用户名.表名(列名)

获取索引信息的常用数据字典有哪些

Dba_indexesdba_ind_columns

如何使用数据字典

获取用户的索引基于的表,所在的表空间,索引的类型和索引的状态等信息

Select table_nameindex_nametablespace_nameindex_typeuniquenessstatus from dba_indexes

获取用户的索引所基于的表和列的信息

Select index_nametable_namecolumn_nameindex_ownertable_owner from dba_ind_columns

为什么要重建索引

如果索引所基于的表上DML操作频繁(在索引所在的列),那么随着时间的推移,索引的效率可能会变得越来越差,此时就需要重建正常索引和位图索引。

如何重建索引

Alter index用户名。索引名 rebuild

维护索引的一些常用方法

!在重建索引时能修改索引的一些存储参数

!在大规模装入数据之前,为了避免索引段的自动扩展,可以使用命令手工地分配磁盘空间

!当索引段中的磁盘空间没用时可以使用命令来回收这些空间

!可以使用命令来合并碎片

如何标识索引的使用情况

Alter index索引名 monitoring usage

如何获取索引的使用情况

Select * from v$object_usage

如何删除索引

Drop index用户名。索引名

如何确定一个索引已经被删除

Select index_nametable_nametablespace_nameindex_typeuniquenessstatus

From dba_indexes

原创粉丝点击