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)