你的位置:首页 > 数据库

[数据库]6.1(续)索引、索引组织表


索引的基本概念:

(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树方式存在数据段中。