索引

1.索引

索引是数据库管理系统提供的一种用来快速访问表中数据的方式。它可以提高查询效率、减少磁盘IO操作、提升数据库的性能等。


数据库的访问方式有两种,顺序访问方式索引访问方式。顺序访问方式就好像一页一页的翻书,直到找到相应的页码。而索引访问方式就好比通过书签来对书进行查询。
索引访问方式有很多优点:

  • 加快检索数据的速度
  • 使用唯一索引可以保证数据库中每一行数据的唯一性
  • 通过索引可以加快表之间的连接

2.索引原理

在Oracle数据库的表中,每张表都有一个rowid,用来唯一标识一条数据所在物理位置的id号,每一行数据的rowid值是固定且唯一的。一旦数据插入表中该值就不会改变。除非表发生移动或者表空间变化等,才会发生改变。


我们可以使用内置函数rowidtocher查询rowid值并输出:

select rowidtocher(rowid) v_rowid,x.* from emp x;

当检索数据时,Oracle首先对索引中的列进行快速的检索,因为索引已经排序,所以可以使用各种快速搜索算法,这样可以避免全表搜索。找到检索的数据后,通过rowid在emp表中读出详细的信息。

3.索引创建

1.自动创建:在定义主键约束(primary key)或者唯一约束(unique)时,Oracle会自动在列上建立索引。
2.手动创建:手动创建索引


索引可以分为单列索引、复合索引和函数索引等,我们可以通过下列语句创建索引:

-- 单列索引:基于单列创建索引
create index index1_emp on emp(empno);

-- 复合索引:基于多列创建所以
create index index2_emp on emp(empno,ename);

-- 函数索引:索引是通过某列的函数值得到的
create index index3_emp on emp(upper(ename));

注意:创建复合索引时,索引的相对顺序决定了索引的性能,通常将搜索频率大的列放在前面。

4.修改索引

4.1 重命名

将索引index1_emp重命名为my_index1_emp:

alter index index1_emp rename to my_index1_emp;

4.2 合并重建索引

随着表的使用,必然有一些索引需要改变,就需要对索引进行修改
合并索引:不会改变索引的物理结构,只是将索引碎片合并在一起
重建索引:删除原来的索引,并新建

--合并索引
alter index index2_emp COALESCE;

注意:合并没有改变索引的物理结构
重建索引就是先删除原来的索引,在重新建立一个新的索引。因为发生了删除操作,所以物理结构可以发生改变。

--重建索引
alter index index1_emp REBUILD;

可以使用存储语句改变索引的表空间:

--重建索引
alter index index1_emp REBUILD TABLESPACE ENSEMBLE;

4.3 删除索引

删除索引使用DROP INDEX语句

-- 删除索引
drop index index3_emp;

对于唯一性的索引,如果索引是Oracle自动建立的,那么我们可以通过使用disable禁用约束或者删除约束的方法来删除对应的索引。当删除表时,该表的索引也会被删除。

--禁用/启用约束
alter table emp enable CONSTRAINT index3_emp;
alter table emp disable CONSTRAINT index3_emp;

-- 删除约束
alter table emp drop CONSTRAINT index3_emp;
posted @ 2016-09-07 00:02  xpeng_V  阅读(103)  评论(0编辑  收藏  举报