Oracle数据库学习笔记(十九)

索引

Posted by java阳旭 on May 22, 2020

Oracle数据库学习笔记(十九)–索引

索引的概念

索引就是在表的列上构建一棵二叉树,达到大幅度提高查询效率的目的,但是索引会影响增删改的效率。

比如说,我们将表看作是书,一开始这些书都是没有目录的,如果要查找某一段文字,需要一页一页的去翻,查询效率特别低。为了提高查找的效率,我们就在每本书上添加一个目录,而这个目录是用二叉树形式存储的,这样查询的效率就会大幅度提高。书中的目录就是表中的索引。但是索引会影响增删改的效率,因为每次执行增、删、改的操作后,都会重新去构建一棵索引的二叉树。

单例索引

单列索引是基于单个列所建立的索引。

1、创建单列索引

CREATE INDEX idx_ename ON emp(ename);

2、单列索引触发规则

条件必须是索引列中的原始值。

SELECT *
FROM emp
WHERE ename = 'SCOTT'

诸如单行函数 [ 比如 upper() 函数 ]、模糊查询都会影响索引的触发。

复合索引

复合索引是基于两个列或多个列的索引。在同一张表上可以有多个索引,但是要求列的组合必须不同。

1、创建复合索引

CREATE INDEX idx_enamejob ON emp(ename, job);

2、复合索引触发规则

复合索引中第一列为优先检索列,如果要触发复合索引,必须包含有优先检索列中的原始值。

触发复合索引

SELECT *
FROM emp
WHERE ename = 'SCOTT'
	AND job = 'xx';

不触发复合索引。用 OR 连接可以将查询语句看作是两个条件不同的查询语句,一个触发索引,另一个不触发索引,用 OR 连接后就是不触发复合索引

SELECT *
FROM emp
WHERE ename = 'SCOTT'
	OR job = 'xx';

如果一张表同时拥有单例索引和复合索引,使用下面的语句,触发的是单列索引

SELECT *
FROM emp
WHERE ename = 'SCOTT';