Oracle索引的作用和用法

一、索引的概念

  一种独立于表的模式对象,可以存储在于表不同的磁盘或表空间中

  索引被删除或损坏时,不会对表产生影响,其影响的只是查询的速度(通过指针加速Oracle服务器的查询速度、通过快速定位数据的方法,减少磁盘I/O)

  索引的内建工作对用户是透明的,由数据库自动维护,我们只需要指定是否添加索引

  索引是为表中字段添加的。当一个字段经常出现在WHERE中作为过滤条件,或 ORDER BY 或 DISTINCT中时可以为其添加索引以提高查询效率。

  在删除一个表时,所有基于该表的索引会自动被删除。

 

二、索引的类型(常用)

  1、B-树索引:按平衡树结构组织的索引,是最常用的索引,也是默认创建的索引类型。B-树索引占用空间多,适合索引值取值范围广(基数大)、重复率底的应用。

  2、位图索引:按位图结构组织的索引,适合索引值取值范围小(基数小),重复率高的应用。

 

三、创建索引

  1、创建索引的情况:

  ①列中数值分布范围很广

  ②列经常在where子句或连接条件中出现

  ③表经常被访问而且数据量很大,访问的数据大概占数量总量的2% - 4%

  ④表经常更新

 

  2、自动创建:在定义primary key 或 unique 约束后系统自动在相应的列上创建唯一索引

  3、手动创建:用户可以在其他列上创建非唯一的索引,以加快查询

  (1)单一索引  

      语法:create index 索引名 on 表名(字段名);

create index idx_emp_ename on emp(ename);

 

 

 

  (2)复合索引:基于多个列的索引

      语法:create index 索引名 on 表名(字段名1,字段名2);

 

create index idx_emp_job_sal on emp(job,sal);

 

 

 

  (3)创建基于函数的索引

 

create index emp_ename_upper_idx on emp(upper(ename));

 

 

 

 

四、修改索引

  1、重命名索引:

  alter index stu_name_index rename to sname_index;

  2、合并索引(表使用一段时间后在索引中会产生碎片,此时索引效率会降低,可以选择重建索引或者合并索引,合并索引方式更好些,无需额外存储空间,代价较低):

  alter index stu_name_index coalesce;

  3、重建索引:

  方式一:删除原来的索引,重新建立索引

  方式二:alter index stu_name_index rebuild;

 

五、查询索引

  可以使用数据字典视图user_indexes 和 user_ind_columns 查看索引的信息

  查看索引个数和类别:select * from user_indexes where table='表名' ;

  查看索引被索引的字段:select * from user_ind_columns where index_name=upper('&index_name');

 

  我们可以通过类似下面的语句来查看一个表的索引的基本情况:

select user_ind_columns.index_name,user_ind_columns.column_name,

user_ind_columns.column_position,user_indexes.uniqueness

from user_ind_columns,user_indexes

where user_ind_columns.index_name = user_indexes.index_name

and user_ind_columns.table_name = ‘你想要查询的表名字’;

  

 

六、删除索引

  使用 drop index 命名删除索引:drop index stu_name_index;

  注意:只有索引的拥有者或者drop any index权限的用户才可以删除索引;删除操作时不可以回滚的

 

参考:oracle中索引的使用 - 一帘幽梦&nn - 博客园 (cnblogs.com)

     Oracle 索引的作用和用法_21号先锋者-CSDN博客_oracle添加索引的作用

     查看Oracle的表中有哪些索引 - 漠漠颜 - 博客园 (cnblogs.com)

上一篇:1 顺序表


下一篇:R 报错: x invalid 'type' (character) of argument