一、概述
数据库中索引(Index)的概念与目录的概念非常类似。如果某列出现在查询的条件中,而该列的数据是无序的,查询时只能从第一行开始一行一行的匹配。创建索引就是对某些特定列中的数据排序,生成独立的索引表。在某列上创建索引后,如果该列出现在查询条件中,Oracle会自动的引用该索引,先从索引表中查询出符合条件记录的ROWID,由于ROWID是记录的物理地址,因此可以根据ROWID快速的定位到具体的记录,表中的数据非常多时,引用索引带来的查询效率非常可观。
优点
1、提高对表的查询速度;
2、对表有关列的取值进行检查。
缺点
对表进行insert,update,delete处理时,由于要表的存放位置记录到索引项中而会降低一些速度。
注意
1、一个基表不能建太多的索引;
2、空值不能被索引
3、只有唯一索引才真正提高速度,一般的索引只能提高30%左右。
二、创建索引
语法
CREATE [unique] INDEX [user.]index ON [user.]table (column [ASC | DESC] [,column [ASC | DESC] ] ... ) [CLUSTER [scheam.]cluster] [INITRANS n] [MAXTRANS n] [PCTFREE n] [STORAGE storage] [TABLESPACE tablespace] [NO SORT]
参数
01、UNIQUE:指定索引列上的值必须是唯一的。称为唯一索引。
02、schema ORACLE模式,缺省即为当前帐户
03、index 索引名
04、table 创建索引的基表名
05、column 基表中的列名,一个索引最多有16列,long列、long raw 列不能建索引列
06、DESC、ASC 缺省为ASC即升序排序
07、CLUSTER 指定一个聚簇(Hash cluster不能建索引)
08、INITRANS、MAXTRANS 指定初始和最大事务入口数
09、PCTFREE 索引数据块空闲空间的百分比(不能指定pctused)
10、STORAGE 存储参数,同create table 中的storage.
11、Tablespace 表空间名
12、NOSORT 不(能)排序(存储时就已按升序,所以指出不再排序)
三、删除索引
DROP INDEX index;
四、修改索引
ALTER [UNIQUE] INDEX [user.]index [INITRANS n] [MAXTRANS n] REBUILD [STORAGE n]
五、例句
--平衡树索引(B-tree index) CREATE INDEX fname_idx ON employees (first_name); --唯一索引(B-tree cluster index) CREATE unique INDEX fname_idx ON employees (first_name); --复合索引 CREATE INDEX fname_id_idx ON employees (first_name, employees_id); --反向键索引(reverse key indexes) CREATE INDEX fname_idx ON employees (first_name) REVERSE; --取消反向索引 ALTER INDEX fname_idx REBUILD NOREVERSE;
四、查看索引信息
1、索引信息,包含索引类型,唯一性,索引作用等表的信息
DBA_INDEXES
ALL_INDEXES
USER_INDEXES
2、索引列信息 包括索引上的列的排序方式等信息
DBA_IND_COLUMNS
ALL_IND_COLUMNS
USER_IND_COLUMNS