一、索引的概念
索引是数据库对象,通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O, 用来加速对表的查询速度(相当于书本的目录)。
与表独立存放,但需要依附于表,是在表的基础上创建的,但由Oracle数据库自动维护的。
二、创建索引
(一)自动创建
当在表上定义一个primary key 或者unique约束条件时,Oracle数据库自动创建一个对应的唯一索引。
(二)手动创建/删除
用户可以创建索引以加速查询,在需要创建索引的字段上创建需要的索引。
create index 索引名称
on 表名(字段名[,字段名])
删除索引后,索引中的数据定义被删除,索引所占的数据空间被释放,但表中的数据仍然存在。
drop index 索引名;
user_index:用户的索引对象的定义,包含索引的名称和索引的一些相关属性。
user_ind_columns:用户索引对象的列的定义信息,会列出索引名称,表名称和列名字等。
三、测试索引
(一)创建测试环境表emp1
--根据emp表创建emp1表
CREATE TABLE emp1 AS(SELECT * FROM emp);
--利用循环插入大量数据
BEGIN
FOR i IN 1..1000000 LOOP
INSERT INTO emp1(empno,ename)(SELECT empno,ename FROM emp);
END LOOP;
END;
--更新所有记录的empno,使其数值唯一
UPDATE emp1 SET empno=ROWNUM;
(二)测试无索引检索时间
--测试无索引检索时间
SELECT * FROM EMP1 WHERE EMPNO = 1221600;
(三)测试建索引后检索时间
--测试建索引后检索时间
CREATE INDEX emp1_index ON emp1(empno);--创建索引
SELECT * FROM EMP1 WHERE EMPNO = 1221600;
四、不适合创建索引的情况
1、很小数据量的表
2、在查询中不常用来作为查询条件的列
3、查询最终得到的结果集很大
4、频繁更新的表(索引对于DML操作是有部分负面影响的)
5、索引列作为表达式的一部分被使用时