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;