Oracle:索引

一:索引分类

1、b-tree索引
   Oracle数据中最常见的索引,就是b-tree索引,create index创建的normal就是b-tree索引。详见 https://blog.csdn.net/qq_43193797/article/details/85147685。
2、bitmap位图索引
   位图索引经常应用于列数据只有几个枚举值的情况,位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等,而身份证号这种类型不适合用位图索引。
   详见 http://blog.itpub.net/29654823/viewspace-2150299。

3、hash索引    hash索引可能是访问数据库中数据的最快方法,但它也有自身的缺点。创建hash索引必须使用hash集群,相当于定义了一个hash集群键,通过这个集群键来告诉oracle来存储表。
  因此,需要在创建HASH集群的时候指定这个值。存储数据时,所有相关集群键的行都存储在一个数据块当中,所以只要定位到hash键,就能快速定位查询到数据的物理位置。
4、reverse反向索引    这个索引不经常使用到,但是在特定的情况下,是使用该索引可以达到意想不到的效果。如:某一列的值为{10000,10001,10021,10121,11000,....},假如通过b-tree索引,大部分都密集发布在某一个叶子节点上,但是通过反向处理后的值将变成{00001,10001,12001,12101,00011,...},很明显的发现他们的值变得比较随机,可以比较平均的分布在各个叶子节点上,而不是之前全部集中在某一个叶子节点上,这样子就可大大提高检索的效率。
5、分区索引和分区表的全局索引    这两个索引是应用在分区表上面的,前者的分区索引是对分区表内的单个分区进行数据索引,后者是对分区表的全表进行全局索引。分区表的介绍,可以后期再做单独详解,这里就不累述了。

 

 二:创建索引

1、语法结构

create[unique]|[bitmap] index index_name --UNIQUE表示唯一索引、BITMAP位图索引
 on table_name(column1,column2...|[express])--express表示函数索引 
  [REVERSE] --reverse反向索引
  [tablespace tab_name] --tablespace表示索引存储的表空间
  [pctfree n1] --索引块的空闲空间n1
  [storage] --存储块的空间( initial 64K --初始64k next 1M minextents 1 maxextents unlimited);

 

2、分类

(1)单一索引

Create Index <Index-Name> On <Table_Name>(Column_Name);

(2)复合索引

--在emp表的deptno、job列建立索引。
Create Index i_deptno_job on emp(deptno,job); 

 3)函数索引(substr举例)

--创建
create index index_name on table_name ( substr(column_name,1,2) ); 
 
--查询
select * from table_name where substr(column_name,1,2)='the string you want to search';

 

三:修改索引

1、重命名索引

alter index index_old rename to index_new;

 2、合并索引

alter index index_name coalesce;

 3、重新构造索引

  我们索引建好后,经过很长一段时间的使用,索引表中存储的空间会产生一些碎片,导致索引的查询效率会有所下降,这个时候可以合并索引,原理是按照索引规则重新分类存储一下,或者也可以选择删除索引重新构造索引。

  alter index index_name rebuild;

 

四:查看索引

select* from all_indexes ;

 

五:删除索引

drop index index_name;

 

posted @ 2022-01-13 09:31  IT6889  阅读(88)  评论(0编辑  收藏  举报