索引的基本概念:
(1).要理解索引,可以把书作为一个模型类比。一本书里的内容,相当于一张大表存储的数据,而书前面的目录就相当于这个表的索引;
(2).索引可以拥有独立的存储磁盘空间;
(3).索引占用的磁盘空间要比表小的多,其主要作用是为了加快对数据的搜索速度;
(4).同时可以保证数据的唯一性。
索引的类型:可分为B树索引(B-Tree)、位图索引(bitmap)、反向键索引(reverse)、基于函数的索引。
B树索引(B-Tree):
树形结构,每个叶子节点中都包括索引列的值和记录行对应的物理地址ROWID(键值和ROWID值);
采用B树索引可以确保无论索引条目位于何处,Oracle都需要花费相同的I/O就可以获取它。
--例如:1001 rowid
--创建普通索引
create index employee_ix_ename on employee(ename);
--创建唯一索引
create unique index employee_UQ_eid on employee(eid);
--创建符合索引
create index employee_ix_ns on employ(ename,esex);
--注意:符合索引中的列,通常将在查询语句的where子句中经常使用的列放在前面。
位图索引(bitmap):
对基数较小,且基数相对稳定的列建立索引时,首先考虑位图索引;
--例如:“性别”列的取值一般只有男、女,类似这样的列基数稳定且较小。
create bitmap employee_ix_esex on employ(esex);
反向键索引(reverse):
也叫翻转索引,是一种特殊的B树索引,适用于在含有序列数的列上创建。
--例如:索引键为2009,反向键索引将其翻转成9002.
create index employee_ix_eid on employee(eid) reverse;
基于函数的索引:
常用与UPPER、LOWER、TO_CHAR(date)等函数分类上
--创建基于to_char()的函数索引
create index employee_ix_func on employee(to_char(edate,'yyyy-mm-dd'));
管理索引:合并、重建、监视、删除
随着表不断更新,插入、更新数据,表的索引会产生越来越多的存储碎片,这会影响索引的使用效率。
--合并索引,释放空间
alter index employee_ix_ename coalesce deallocate unused;
--重建索引,实际上是在表空间中重新建立一个新的索引,然后删除原来的索引
alter index employee_ix_ename rebuild;
--监视索引,打开索引的监视状态后,可查看V$object_usage
----打开
alter index employee_ix_ename monitoring usage;
----关闭
alter index employee_ix_ename nomonitoring usage;
--删除索引
Drop index employee_ix_ename;
索引组织表(Index Organized Table,IOT):
不像普通的表直接采用堆组织方式将记录无序地存放在数据段中;
而采用类似B树索引的索引组织方式将记录按照某个键列进行排序后,再以B树方式存在数据段中。