Oracle 索引 index

一、索引的概念

索引是数据库对象,通过使用快速路径访问方法快速定位数据,减少了磁盘的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、索引列作为表达式的一部分被使用时

猜你喜欢

转载自blog.csdn.net/lin434406218/article/details/54695072