10.3 索引的管理

索引的管理主要包括索引的创建、删除、修改以及索引的重新组织等操作。本节主要介绍几种特殊的索引,如反向索引、位图索引等,这些索引虽然并不常用,但是在特殊的场合能起到非常重要的作用。

10.3.1 索引概述

索引是一种数据库对象,它建立在表的一个或多个列上,目的是为了提高该表上的查询速度。索引有两种创建方式,一种方式是在表上指定主键约束或唯一性约束时自动创建,另一种方式是通过命令手工创建。这里我们主要介绍后一种方式。

索引虽然可以提高表的查询速度,但是如果在表上执行DML操作,索引中的数据可能需要重新排序,从而降低数据库的性能。因此,如果在表上主要执行DML操作,而不是查询操作,那么应该考虑减少甚至不创建索引。如果要通过SQL*Loader或者import工具向表中插入大量的数据,那么可以考虑在这个操作完成之后再创建索引。

索引的形式很多,按照数据的组织形式不同,可以把索引分为B树索引、反向索引、位图索引、基于函数的索引和分区索引等多种形式。其中B树索引是最常用的索引形式,这部分内容已经在第1章中进行了详细的描述,在本章中主要介绍其他几种形式的索引。

索引是一种数据库对象,它虽然建立在某个表之上,但一般情况下它被单独存放在一个索引段中,因此我们在创建索引时可以为索引段指定物理属性和存储参数等信息。例如,下面的语句用于在表dept的dname列上创建一个索引。


SQL>CREATE INDEX dept_idx1 ON dept(dname)

TABLESPACE users

PCTFREE 20

INITRANS 5 MAXTRANS 10

NOLOGGING

PARALLEL;


在CREATE INDEX命令中所使用的子句与创建表时使用的子句意义基本相同。需要注意的是,在创建索引时不能使用PCTUSED和CACHE子句。