ME索引简介

唯一索引:

 确保在定义索引的列中没有 重复值

 ORACLE自动在表的主健列上创建唯一索引

  create unique index item_index on itemfile(itemcode);

位图索引:

主要用重复值多的,列如:性别, 或只有0 1 ,那么用此索引

create index bitmap  索引名 on 表(列)

 

复合索引(组合索引):

组合索引是在表的多个列上创建的索引

索引中列的顺序是任意的

如果SQL语句的WHERE子句中引用了组合索引的所有列或大多数列,则可以提高检索速度

主要是where 条件后的大于1 个

create index  索引名 on 表(列1,列2....)

 

反向索引:

反向索引反转索引列键值得每个字节

通常建立在值是连续增长的列上,使数据均匀的分布在整个索引上

主要用于像序列 0001 。0002

create index  索引名 on 表(列) reverse

create index rev_index on itemfile (itemcode) REVERSE;

alter index rev_index REBUID NOREVERSE;

 

压缩索引:

 主要是压缩空间,列如,有主健关系的从表的关联列有重复值较多,用此

create index 索引名 on 表(列) compress

 

函数索引:

在where条件下游函数时,所建立的索引会无效,必须建函数索引

Oracle8i的很重要的一个新特性就是增加了function-based index这种索引类型(后面简称为FBI)。有了这个特性后,Oracle DBA就可以在索引中使用函数或者表达式了。这些函数可以使Oracle自己的函数,也可以使用户自己的PL/SQL函数等。

例如:

 使用基于成本的优化器,索引为标准的B树索引,建立在SURNAME列上。
  SQL>create index non_fbi on sale_contacts (surname);
  SQL>analyze index non_fbi compute statistics;
  SQL>:analyze table sale_contacts compute statistics;

SQL>SELECT count(*) FROM sale_contacts
  WHERE UPPER(surname) = 'ELLISON';

现在我们试着建立一个FBI索引:
  SQL>create index fbi on sale_contacts (UPPER(surname));
  SQL>analyze index fbi compute statistics;
  SQL>analyze table sale_contacts compute statistics;
  SQL>SELECT count(*) FROM sale_contacts WHERE UPPER(surname) = 'ELLISON';
  Execution Plan

在PL/SQL developer中用F5进行对比察看

-----

 基于函数的索引:

  基于一个或多个列上的函数或表达式创建的索引

   表达式中不能出现聚合函数

   不能再LOB类型的列上创建

   创建时必须具有query rewrite权限

CREATE INDEX lowercase_idx ON toys(LOWER(toyname));

SELECT toyid FROM toys WHERE lower(toyname)='doll';

 

索引组织表

索引组织表的数据存储在与其关联的索引中

索引中存储的是行的实际数据,而不是ROWID

基于主键访问数据

CREATE TABLE命令与ORGANIZATION INDEX子句一起用于创建索引组织表

CREATE TABLE ind_org_tab(

  vencode number(4) primary key,

  venname varchar2(20)

) ORGANIZTION INDEX;

 

普通表                                     索引组织表

 

普通表   索引组织表
ROWIS唯一的标识行 主键唯一的标识行
隐式的ROWID列 没有隐式的ROWID列
基于ROWID的访问 基于主键的访问
顺序扫描返回所有行 完全索引扫描返回所有行,并按主键顺序排列
支持分区 不支持分区

 

你可能感兴趣的:(oracle,sql)