Oracle PL/SQL开发基础(第四弹:索引)

索引是数据库管理系统提供的一种用来快速访问表中数据的机制。在数据库管理系统系统中,索引的意义非常重大,使用索引可以显著提高对数据库数据的查询效率,减少磁盘的IO操作,提升整个数据库系统的性能。当定义主键或唯一性的约束时,Oracle会自动在相应的字段上创建唯一性索引。

索引简介

索引是建立在数据库表中的一列或多列用来加速访问表中互数据的辅助对象。

索引有以下优点:
- 索引可以大大加快检索数据的速度。
- 使用唯一性索引可以保证数据库表中每一行数据的唯一性。
- 通过索引可以加快表与表之间的连接。
- 在使用分组和排序子句进行数据检索时,使用索引可以显著地减少查询中分组和排序的时间。

但是索引需要在表基础上创建,需要占用额外的物理空间,而且对表数据进行修改时,比如增删改的时候,需要动态地进行维护,这会降低数据维护的速度。

索引原理

在Oracle数据表中,每一张表都有一个ROWID伪列,这个ROWID是用来唯一标识一条记录所在物理位置的一个id号,每一行对应的ROWID值是固定且唯一的。一旦数据存入数据库就确定,不会在对数据库表操作的过程中发生改变,只有在表发生移动或表空间变化等操作产生物理位置变化时,才发生改变。
如果我们要为emp表的ename这个列建立一个索引,如:

CREATE INDEX idx_emp_ename ON emp(ename);

Oracle在创建idx_emp_ename索引时,会对emp表进行一次全表扫描,获取每条记录ename列的数据,并进行升序排序。同时会获取每条记录的ROWID值,连同排序后的ename列一起存储到索引段中,其格式是(索引列值,ROWID),这种组合也称为索引条目。
当检索数据时,比如使用WHERE子句按指定条件检索数据时,Oracle将首先对索引中的列进行快速搜索,由于索引列已经排过序,因此可以使用各种快速的搜索算法,这样就可以避免对全表进行扫描。在找到所要检索的数据后,通过ROWID在emp表中读取具体的记录值。

创建索引

索引的创建方式有两种:
- 自动创建:在定义主键约束或唯一约束时,Oracle自动在相应的约束列sang建立唯一索引。Oracle不推荐人为地创建唯一索引。
- 手动创建:用户可以在其他列上创建非唯一索引。

索引根据其组织形式又可以分为多种类型&#x

你可能感兴趣的:(Oracle,oracle,索引,index,索引空间,索引原理)