1、索引的概念
索引是一种数据库对象,它是基于表中的一个列或多个列的值,提供对表进行快速访问的一种访问机制。索引的目标是提高数据提取的速度。
2、索引的优缺点
优点:
1. 创建唯一性索引,保证数据库表中每一行数据的唯一性
2. 大大加快数据的检索速度,这也是创建索引的最主要的原因
3. 加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
缺点:
1. 索引创建在表上,不能创建在视图上
2. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
3. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚合索引,那么需要的空间就会更大
4. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度
索引的使用原则:
(1)索引字段建议建立NOT NULL约束
(2)作为主键的列和经常用在表间连接的列,在连接字段上应该建立索引;
(3)经常需要排序的列,经常出现在Where子句中的字段且过滤性很强的,特别是大表的字段,应该建立索引;
(4)可选择性高的关键字,应该建立索引;
(5)可选择性低的关键字,但数据的值分布差异很大时,选择性数据比较少时仍然可以利用索引提高效率
(6)将索引放在一个单独的表空间中,不要放在有回退段、临时段和表的表空间中
哪些不应该建索引:
(1)很少使用的列和数据值很少的列
(2)经常改动的字段不建议建索引
(3)修改性能远大于检索性能时
(4)布尔型字段如‘男’、‘女’不要建索引
(5)定义为blob的列
3、索引的创建
(1) 语法格式
create unique index 索引名 on 表名 (column asc|desc , column asc|desc ......)
unique 定义的是唯一索引确保在定义索引的列中没有重复的值。唯一索引中的索引关键字只能指向表中的一行
table 创建索引的基表名
column 基表中的列名
desc、asc 缺省为ASC即升序排序
注:oracle 自动为主键和唯一键列创建唯一索引。
普通索引也叫B数索引
(2)索引的创建示例
create unique index emp_ename on emp(ename);
create unique index dept_index on dept(dname,loc......); ----聚合索引
通过以上语句重建索引,也可先删除索引再建立新的索引。
(3)索引的删除
drop index 索引名
例如:drop index ID_STU;
(4)查看索引:
和索引有关的数据字典:
USER_INDEXS:用户创建的索引信息
USER_IND_COLUMNS:与索引相关的表列信息
4、维护索引
(1)重建索引
索引需要维护,如果建立了索引的表中有大量的删除和插入操作,会使得索引很大,因为删除操作后,删除值的索引空间不能被自动重新使用,对于大表和DML操作很频繁的表,索引的维护是很重要的。Oracle提供了rebuild指令来重建索引。使索引空间可以重用删除值所占用的空间,使索引更加紧凑。
语句:alter index index_name rebuild
(2)合并索引碎片
合并索引碎片可以释放部分磁盘空间,是索引维护的一种重要方式,也是维护磁盘空间的方式,类似于磁盘碎片整理,把不用的空间释放出来再利用。
语句:alter index index_name coalesce
(3)重命名索引
语句:alter index old_index_name rename to new_index_name
(4)删除索引
drop index 索引名
例如:drop index ID_STU;
来源:https://www.cnblogs.com/wyx666/p/11218139.html