10.3.6 索引的维护
索引的维护内容主要包含修改索引的物理属性、手工分配和回收存储空间、重建索引、合并索引等。用户必须是索引的属主,或者具有ALTER ANY INDEX系统权限。
例如,以下语句用于修改索引dept_idx1的一些属性:
SQL>ALTER INDEX dept_idx1
INITRANS 6 MAXTRANS 12
LOGGING
NOPARALLEL;
对于那些因施加主键约束或唯一性约束而产生的索引,则需要通过执行ALTER TABLE命令来修改它的存储参数。例如:
SQL>ALTER TABLE dept
ENABLE PRIMARY KEY USING INDEX
PCTFREE 20
INITRANS 5 MAXTRANS 10;
当索引段的空间被使用完以后,它可以自动扩展。用户也可以手工为索引段分配一些空间,也可以手工回收那些没有使用的存储空间。例如,下面的语句为索引dept_idx1分配一个256K的区:
SQL>ALTER INDEX dept_idx1 ALLOCATE EXTENT(SIZE 256K);
在为索引手工分配区时,如果没有指定区的大小,则采用索引所在表空间的区大小。实际上,手工指定的区大小与索引所在表空间的区大小可能不一致。假设表空间的区大小是64KB,那么上述命令的执行结果是为索引分配了4个64KB的区。
下面的语句用于回收索引dept_idx1中未使用的存储空间:
SQL>ALTER INDEX dept_idx1 DEALLOCATE UNUSED;
重建索引是提高索引访问效率的一种有效方法。随着用户不断地在表上执行DML操作,索引段中碎片将越来越多,重建索引可以把索引段中的数据移动到另一块存储区,并把它们以紧凑的方式重新排列,从而提高索引的访问效率。例如:
SQL>ALTER INDEX dept_idx1 REBUILD;
对于在线创建的索引,可以对其进行在线重建。在线重建的意思是在表上有用户正在执行DML操作的时候,对索引进行重建。例如:
SQL>ALTER INDEX emp_dept_idx REBUILD ONLINE;
合并索引可以使索引的存储空间得到充分利用。如果相邻的数据块中有空闲空间,可以将这些数据块中的索引项合并在一个数据块中。例如:
SQL>ALTER INDEX dept_idx1 COALESCE;