一、索引简介
索引是为了加速对表中数据库的检索而创建的离散型存储结构,索引是针对表创建的,是由数据页以外的索引页组成,每个索引页中的行都含有逻辑指针,以便加速检索物理数据。
CREATE [UNIQUE] | [BITMAP] INDEX index_name --unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2 --bitmap,创建位图索引
[ASC|DESC],…] | [express])
[TABLESPACE tablespace_name]
[PCTFREE n1] --指定索引在数据块中空闲空间
[STORAGE (INITIAL n2)]
[NOLOGGING] --表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用
[NOLINE]
[NOSORT]; --表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用
二、索引分类
- 唯一索引
唯一索引建立在表中无重复记录的列、
ORACLE在创建主键时,自动给主键添加唯一索引
语法:
create unique index index_name on table_name(column_name);
- 组合索引
给表中多列创建的索引
组合索引随意排列,使用频率最高的列放在首位
语法:
create index index_name on table_name (column_name1,column_name2);
- 反向键索引
反向键索引反转索引列键值的每个字节,为了实现索引的均匀分配,避免b树不平衡
通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上
创建索引时使用REVERSE关键字
语法:
create index index_name on table_name(index_name) reverse;
- 函数索引
当函数运用在where条件里,可以为函数创建索引
表达式中不能出现聚合函数 ,例如:可以使用len、trim、substr、upper(每行返回独立结果),
不能使用如sum、max、min、avg等
不能在LOB类型的列上创建
创建时必须具有 QUERY REWRITE 权限
语法:
create index index_name on table_name(函数名(cloumn_name));
- 位图索引
创建位图索引时,oracle会扫描整张表,并为索引列的每个取值建立一个位图(位图中,对表中每一行 使用一位(bit,0或者1)来标识该行是否包含该位图的索引列的取值,如果为1,表示对应的rowid所在的记录包含该位图索引列值),最后通过位图索 引中的映射函数完成位到行的ROWID的转换。
对于基数小的列(例如性别等),表中update操作少时,适合简历位图索引
语法:
create bitmap index index_name on table_name(index_name);