Oracle索引

索引是为了加快数据的查找而创建的数据库对象,特别是对数据量较大的表,索引可以有效地提高查找速度,也可以保证数据的唯一性。索引是对数据库表中一列或多列的值进行排序的一种结构使用索引可快速访问数据库表中的特定信息。

单一索引

CREATE INDEX 索引名称 ON 表名(列名);

复合索引

CREATE INDEX 索引名称 ON 表名(列名1,列名2);

唯一索引

如果表中的列没有重复的值,是唯一的,就可以创建唯一索引,唯一索引的效率比普通索引要高很多。不要为表的主建创建索引,因为Oracle自动为表的主建字段创建唯一索引。

CREATE UNIQUE INDEX 索引名称 ON 表名(列名);

修改索引

修改索引的操作比较多,这些的工作一般由管理员(DBA)来执行。

1、重建索引

重建索引可以减少硬盘碎片和提高数据库系统的性能。

ALTER INDEX 索引名 REBUILD;

2、整理碎片

对索引的无用空间进行合并,减少硬盘碎片和提高数据库系统的性能。

ALTER INDEX 索引名 COALESCE;

3、修改索引名

ALTER INDEX 索引名 RENAME TO 新索引名;

4、禁用索引

ALTER INDEX 索引名 UNUSABLE;

索引被禁用后,如果要启用,需要用REBUILD重建。

删除索引

DROP INDEX 索引名称;

查询表索引

SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = '表名称';

查询表索引列

SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = '表名称';

查看索引是否被使用或者有效

explain plan for SQL语句;
select * from table(dbms_xplan.display);

在查询结果的 Operation 列中查看是否存在以下索引扫描类型,如果存在则说明索引已被使用。
若存在 TABLE ACCESS FULL 则说明进行了全表扫描,索引未被使用。

索引扫描类型

  1. INDEX UNIQUE SCAN 索引唯一扫描,效率最高。
  2. INDEX RANGE SCAN 索引范围扫描,效率较高。
  3. INDEX FULL SCAN 索引全扫描,效率较低。
  4. INDEX FAST FULL SCAN 索引快速扫描,效率一般。
  5. INDEX SKIP SCAN 索引跳跃扫描,效率还行。

索引失效

索引的目的是为了避免全表扫描数据,提高查询效率,但是如果sql语句写的不好致使索引失效,反而会影响数据查询效率。

  1. 没有 WHERE 子句
  2. 使用 IS NULL 和 IS NOT NULL
  3. WHERE 子句中使用函数
  4. 使用 LIKE ‘%T’ 进行模糊查询
  5. WHERE 子句中使用不等于操作
  6. 等于和范围索引不会被合并使用
  7. 比较不匹配数据类型
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片