索引是与表关联的可选结构.可以明确地创建索引,以加快对表执行SQL语句的速度.合理使用索引是减少磁盘I/O的主要方法.索引包括以下几种类型: 1.标准索引. 语法: create index 索引名 on 表名(字段名) 实例如下: create index ind_ename on emp(ename) 2.唯一索引.主键上会自动创建唯一索引.唯一索引确保在定义索引的列中,表的任意两行的值都不相同. 语法: create unique index 索引名 on 表名(字段名) 实例: create unique index ind_name on emp(ename) 3.组合索引,组合索引是在表中的多个列上创建的索引. 基于:select .... from table where ...and ... 此种多条件语句考虑建立组合索引 实例: create index ind_name on emp(ename,sal) 4.反向键索引.此索引适合由序列组成的字段或者某数据分布密集的字段. 如: 原字段 反向键字段 1001 1001 1002 2001 1003 3001 1004 4001 是不是观察到哪边检索得快些?对,就是左边的反向键字段. 实例: create index ind_empno on emp(empno) reverse 5.位图索引.使用位图索引的优点在于,它最适用于低基数列,也就是不同值的数目比表的行数少的列.如果某个列的值重复超过一百次,则可以考虑在该列上创建位图索引. 实例: create bitmap index in_deptno on emp(deptno) 6.基于函数的索引. 为了方便操作,oracle提供了一个选项,可以基于一个或多个列上的函数或表达式创建索引. 如下所示: create index ind_sal on emp(lower(ename)) 必须注意的是,要创建基于函数或表达式的索引,必须具有query rewaite 系统权限. 7.索引组织表. 索引组织表与普通表不同之处在于,该表的数据存储在与其关联的索引中.对表数据进行的修改,如添加新行,更新新行或删除行,只会导致索引的更新.索引组织表最大的优点,提高读取速度,降低I/O读写.建立索引组织表必须有一列为主键. 实例如下: create table ind_table ( id number primary key, name varchar2(20) ) organization index; OK,下面再来讲讲索引中的分区. 与对表进行分区类似,Oracle也允许对索引分区.与表分区一样,索引分区可以存储在不同的表空间中.索引分区有如下三种类型: (1)局部分区 局部分区索引是在分区表上创建的一种索引,在局部分区索引中,Oracle为表的每个分区建立一个独立的索引. 实例如下: 先创建一个分区表: create table order_mast ( order_id number(4), order_name varchar2(20) ) partition by range(order_id) ( partition p1 values less than(1000), partition p2 values less than(2000), partition p3 values less than(maxvalue) ); 然后紧接着创建局部分区索引: create index myindex on order_mast(order_id) local (2)全局分区 全局分区是指在分区表或非分区表上创建的索引.全局索引的键可以引用存储在多个分区中的行.合璧索引是自己分区. 实例如下: create index glb_ind on order_mast(order_id) global partition by range(order_id) ( partition p1 values less than(1500), partition p2 values less than(maxvalue) ); (3)全局非分区,索引中不分区,与普通索引相同.在此不在举例说明.
|