索引(index)

在关系型数据库中,索引是一种单独的、物理的对数据库表中的一列或多列的值进行排序的一种存储结构,他是某个表中一列或若干列值的集合和相应的指向表中物理标识,这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录的页码快速找到所需的内容;

索引提供对表中行的直接和快速访问,他的目的是用已索引的路径快速定位数据以减少磁盘I/O。索引有Oracle服务器自动使用和维护,索引逻辑地和物理地独立于他们所索引的表,这意味着索引可以在任何时候被创建或删除,并且不影响基表或其他的索引。当删除表时,相应的索引也被删除;


一、索引类型


唯一性索引

当在一个表中定义一个例为主键,或者定义一个唯一约束时Oracle服务器 自动创建该索引,所有的名字习惯上是约束的名字;

非唯一性索引

由用户创建,例:可以创建一个foreign key列索引用于一个查询中的链接来改 进数据取回的速度;


二、创建索引的方式


自动

在一个表的定义中,当定义一个primary key或unique约束时,一个唯一索引 被自动创建;

手动

用户能够在列上创建非唯一的索引来加速对行的访问;


三、使用索引


过多也是件坏事

在表上建立更多的索引并不意味着更快地查询,在带索引的表上被提交的每个 DML操作意味着索引必须更新;与表连接的索引越多,对Oracle数据库的影 响越大,Oracle数据库在每次DML操作之后必须更新所有的索引;

什么时候创建索引

1.一个列包含一个大范围的值;
2.一个列包含很多的空值;
3.一个或多个列经常同时在一个where子句中或一个连接条件中被使用
4.表很大,并且经常的查询期望取回少于百分之2到4的行;

什么时候不创建索引

1.表很小;
2.不经常在查询中作为条件使用的列;
3.大多数查询期望取回多于表中百分之2到4的行;
4.表经常被更新;
5.被索引的列作为表达式的一部分被引用;

操作索引

1.非唯一性索引的类型

单行索引,复合索引(组合索引),函数索引;

2.创建索引的语法

plsql强制索引 plsql 索引_java

3.创建单行索引

为 employees 表中的 last_name 创建一个索引并命名为 emp_index。
Create index emp_index on employees(last_name);

4.创建复合索引

为 departments 表 创 建 一 个 包 括 manager_id 与 location_id 复 	合 索 引 并 命 名 为dept_man_loc。
Create index dept_man_loc on departments(manager_id , location_id);

5.创建函数索引

为 departments 表中的 department_name 创建一个带有大写函数的索	引 dept_upper2。
Create index dept_upper2 on departments(upper(department_name));

6.查询索引

plsql强制索引 plsql 索引_plsql强制索引_02

Column_position索引的位置
Uniqueness 索引唯一的名字

查询departments表的索引名字,所在列的名字,列的位置,唯一的		名字
Select ix.index_name , ic.column_name , ic.column_position , ix.uniqueness 	from user_indexes ix , user_ind_columns ic where ix.index_name = 	ic.index_name and ic.table_name=’DEPARTMENTS’;

7.删除索引

plsql强制索引 plsql 索引_oracle_03

删除名称为dept_upper 的索引;
Drop index dept_upper ;