Lazy loaded image
oracle indexing
00 分钟
2022-10-14
2024-7-30
type
status
date
slug
summary
tags
category
icon
password
comment
AI summary

1 索引概述

如果要在表中查询指定记录,在没有索引时必须遍历整表,有索引时只要在索引中找到符合查询条件的索引字段值,就可以通过保存在索引中的ROWID快速找到表中对应的记录。

2 索引优点

  1. 通过创建唯一索引,保证表中每行数据唯一性
  1. 可以大大加快数据检索速度,这是索引最主要的作用
  1. 可以加速表与表之间的连接,特别是在实现数据的参考完整性方面
  1. 在使用分组和排序子句进行数据检索时,可以显著减少查询分组和排序的时间
  1. 通过使用索引,可以在查询过程中,使用优化隐藏起,提高系统性能

3 索引缺点

  1. 创建索引和维护索引需要耗费额外的时间与空间,且会随着数据量的增加而增加,聚簇索引,占用的空间会更大
  1. 对表中的数据进行DML操作时,索引也需要动态的维护,索引越多,DML速度越慢,尤其会影响insert与delete的速度

4 什么时候使用索引

  1. 索引应该建立在where 子句频繁引用的列上,如果在大表上频繁使用某列或者某几列作为条件执行索引操作,并且检索行数低于15%,则可以考虑在这些列上建立索引
  1. 如果需要基于某些列执行排序操作,在这些列建立索引可以加快数据排序速度
  1. 多表连接时使用的连接列,应该建立索引,主要是外键
  1. 在经常需要搜索的列上,可以建立索引加快搜索速度

5 索引限制

SQL中有很多情况不能使用索引(已经建立索引)
  1. 使用不等于操作符时(<> !=)
下面的查询及时在empno 列有一个索引查询仍然会执行一次全表扫描
把上面的查询改一下,索引就可以生效了,这是因为改了之后,查询是基于规则的优化器而不再试基于代价的优化器。
通过把不等于符号改成or条件,索引就生效了。
示例:创建一张产品表(tb_product),为该表的product_id列创建索引,以便在使用到该列时提高查询效率。
下面代码用来在product_id列上创建唯一索引:
  1. 修改索引
索引的修改主要由数据库管理员完成,,修改索引主要涉及到修改索引的存储参数、重建索引、对无用的索引空间进行合并等。
修改索引的语法:
ALTER [UNIQUE] INDEX [user.] index INITRANS n MAXTRANS n REBUILD [STORAGE ]
说明:
示例:
使用ALTER INDEX语句修改索引参数:
使用ALTER INDEX语句修改索引为逆向索引:
使用ALTER INDEX语句合并索引空间:
  1. 删除索引
可以使用DROP语句删除索引。
上一篇
oracle compression
下一篇
oracle 教程