索引

两盒软妹~` 提交于 2020-03-02 21:07:20

 

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     基表中的列名

descasc  缺省为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;

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!