第11章 索引的管理与维护

1. Oracle索引是一个独立于表的对象,它可以存放在与表不同的表空间中。即使索引崩溃,甚至索引删除都不会印象真正存有数据的表。

2. 为什么要引入索引:为了加快查询的速度。

3. 索引对查询语句的影响:能够加快查询速度。

4. 索引对DML语句的影响。当对表进行DML操作时,oracle服务器将自动维护基于该表的全部索引,维护方法如下:

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

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

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

5. 索引的分类

 1)逻辑分类

   a)单列索引:基于一列的索引;

   b)多列索引:基于多列的索引;

   c)唯一索引:保证表中任何数据行的索引列的值都不相同;

   d)非唯一索引:表中不同数据行的索引列的值可以相同;

   e)基于函数的索引:利用表中的一列或多列使用函数或表达式创建的索引;

 2)物理分类

   a)分区或非分区索引;

   b)b-树:包括正常或反转关键字索引;

   c)位图索引;

6. B-树

 1)B-树索引的结构

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

 2)B-树索引的应用范围

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

7.位图索引

 1)位图索引的结构

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

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

 2)位图索引的应用范围

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

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

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

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

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

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

9.创建索引遵守的原则:

 1)平衡查询和DML的需要;

 2)将其放入单独的表空间,不要与表、临时段或还原段放在一个表空间,可能增减输入/输出(I/O);

 3)使用同一的exten尺寸;

 4)对大索引可考虑使用nologging,通过减少redo操作来提高系统的效率;

 5)索引的INITRANS参数通常应该比相对应表的高;

10.创建索引

   create [unique|bitmap] index [用户名.]索引名

      on [用户名.]表名(列名 [asc|desc],)

       [tablespace 表空间名]

      [pctfree 正整型数] 在创建索引时每一个块预留的空间

      [initrans 正整型数] 在每一个块中预分配的事务记录数,默认值为2

  [maxrans 正整型数] 在每一个块中可以分配的事务记录数的上限

      [logging|nologging]

11. 查询索引基于表、所在的表空间、索引的类型和索引的状态等信息

    select index_name,table_name,tablespace_name,index_type,uniqueness,status from dba_indexes where owner='SCOTT';

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

 select index_name,table_name,column_name,index_owner,table_name from dba_ind_columns where table_owner='SCOTT'; 

12. 为什么要重建索引

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

13. 如何重建索引

     Alter index用户名.索引名 rebuild

14. 维护索引的一些常用方法

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

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

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

 4)可以使用命令来合并碎片

15. 如何标识索引的使用情况

  Alter index 索引名 monitoring usage

16. 如何获取索引的使用情况

  Select * from v$object_usage

17. 如何删除索引

  Drop index用户名.索引名

原文地址:https://www.cnblogs.com/kangxuebin/p/2824070.html