Oracle索引

创建索引语法:

CREATE [UNIUQE | BITMAP] INDEX [schema.]index_name

ON [schema.]table_name

([column_name] | [expression] [ASC | DESC],

[column_name] | [expression] [ASC | DESC],...)

[TABLESPACE tablespace_name]

[CLUSTER scheam.cluster]

[INITRANS n]

[MAXTRANS n]

[PCTFREE n]

[STORAGE storage_settings]

[LOGGING | NOLOGGING]

[COMPUTE STATISTICS]

[NOCOMPRESS | COMPRESS nn]

[NOSORT | REVERSE]

[PARTITION | GLOBAL PARTITION partition_setting];

 

 

[UNIUQE | BITMAP]:指定UNIQUE为唯一值索引,BITMAP为位图索引,省略为B-Tree索引。

[column_name] | [expression] [ASC | DESC]:可以对多列进行联合索引,当为expression时即"基于函数的索引"。

TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高)

CLUSTER:指定一个聚簇(Hash cluster不能建索引)

INITRANS、MAXTRANS、PCTFREE:(不能指定pctused),参考:http://blog.csdn.net/huang_xw/article/details/6995442

STORAGE:http://www.cnblogs.com/rootq/articles/1089383.html

[LOGGING | NOLOGGING]:http://www.cnblogs.com/cnjava/archive/2012/04/09/2439497.html

COMPUTE STATISTICS:创建新索引时收集统计信息

NOCOMPRESS | COMPRESS nn:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值)

NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值

PARTITION | NOPARTITION:可以在分区表和未分区表上对创建的索引进行分区。参考:http://www.cnblogs.com/tracy/archive/2011/05/31/2064027.html

 

修改索引:

ALTER [UNIQUE] INDEX [schema.]index_name

[INITRANS n]

[MAXTRANS n] 

REBUILD 

[STORAGE n];

 

修改索引的主要任务是修改已存在索引的存储参数,适应增长的需要或者重新建立索引。

REBUILD 是根据原来的索引结构重新建立索引,实际是删除原来的索引后再重新建立。用 REBUILD重建索引可以减少硬盘碎片和提高应用系统的性能。

 

ALTER INDEX [schema.]index_name COALESCE;

对索引的无用空间进行合并。

 

删除索引:

DROP INDEX [schema.]indexname;

 

当不需要时可以将索引删除以释放出硬盘空间。

当表结构被删除时,有其相关的所有索引也随之被删除。

 

函数索引:

CREATE INDEX index_name ON table_name (expression | function(column_name));

 

反向键索引:

CREATE INDEX index_name ON table_name (column_name) REVERSE TABLESPACE space_name; 

 

创建唯一索引:

CREATE UNIQUE INDEX index_name ON table_name (column_name) TABLESPACE space_name; 

 

创建组合索引:

CREATE INDEX index_name ON table_name (column_name1, column_name2) TABLESPACE space_name; 

 

索引的优点:

1.可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 

2.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 

3.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 

4.通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 

 

索引的缺点:

1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 

2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 

3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

 

什么样的列可以建立索引:

1.经常出现在where子句的列; 

2.主键(PK)列,唯一键(UK)列,外键(FK)列; 

3.经常用于表连接的列,这些列主要是一些外键; 

4.在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; 

5.经常需要排序(order by)和分组(group by)的列; 

6.该列是高基数数据列;

7.该列包含很多null值。

 

什么样的列不应该建立索引:

1.对于那些在查询中很少使用或者参考的列不应该创建索引。 

2.对于那些只有很少数据值的列也不应该增加索引,例如性别。(粒度很小的列)

3.对于那些定义为blob数据类型的列不应该增加索引。因为,这些列的数据量要么相当大,要么取值很少。 

4.当修改性能远远大于检索性能时,不应该创建索引。因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。 

 

索引分类

物理分类:B-tree、位图索引、分区索引、非分区索引

逻辑分类:唯一性索引、非唯一性索引、单列索引、联合索引、函数索引。

 

各索引介绍,待补充。

http://blog.csdn.net/ceclar123/article/details/8306891

http://orange5458.iteye.com/blog/1165319

 

你可能感兴趣的:(Oracle索引)