索引是一种提高数据检索效率的数据库对象,能够为数据的查询提供快捷的存取路径,减少磁盘I/O。虽然索引是基于表而建立的,但索引并不依赖于表。索引由系统自动维护和使用,不需要用户参与。

一、索引类型

(1)B-树索引:按平衡树结构组织的索引,是最常用的索引,也是默认创建的索引类型。B-树索引占用空间多,适合索引值取值范围广(基数大)、重复率低的应用。
(2)位图索引:按位图结构组织的索引,适合索引值取值范围小(基数小),重复率高德应用。
(3)函数索引:基于包含索引列的函数或表达式创建的索引(索引值为计算后的值)
(4)唯一性索引 与 非唯一性索引:唯一性索引是索引值不重复的索引,非唯一性索引是索引值可以重复的索引。在默认情况下,Oracle创建的索引是非唯一性索引。当在表中定义主键约束或唯一性约束时,Oracle会自动在相应列上创建唯一性索引。
(5)单列索引 与 复合索引:索引可以创建在一个列上,也可以创建在多个列上。创建在一个列上的索引称为单列索引,创建在多个列上的索引称为复合索引。


二、索引使用原则

  由于索引作为一个独立的数据库对象存在,占用存储空间,并且需要系统进行维护,因此索引的使用需要遵循下列原则。

(1)导入数据后再创建索引
(2)在适当的表和列上创建适当的索引。如果经常查询的记录数目少于表中记录总数的5%时就应当创建索引;如果经常进行连接,应该在连接列上建立索引;对于取值范很大的列应当创建B树索引,而对于取值范围很小的列应当创建位图索引。
(3)合理设置复合索引中列的顺序,应将频繁使用的列放在其他列的前面。
(4)限制表中索引的数目。表中索引数目越多,查询速度越快,但表的更新速度越慢。
(5)选择存储索引的表空间。在默认情况下,索引与表存储在同一表空间中。


三、索引使用(创建、修改、删除、查看)

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]; --表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用

(1)创建

//打开 时间
set timing on

create index stu_name_index on test_student(s_name);

【Oracle学习】之 索引(index)_数据库

(2)修改索引
1)重命名索引

alter index stu_name_index rename to

2) 合并索引(表使用一段时间后在索引中会产生碎片,此时索引效率会降低,可以选择重建索引或者合并索引,合并索引方式更好些,无需额外存储空间,代价较低)

alter

3)重建索引

  方式一:删除原来的索引,重新建立索引

  方式二:

alter

【Oracle学习】之 索引(index)_oracle_02

(3)删除索引

drop

(4)查看索引

select index_name,index_type, tablespace_name, uniqueness from all_indexes where table_name ='test_student';

【Oracle学习】之 索引(index)_位图_03