type
status
date
slug
summary
tags
category
icon
password
comment
AI summary
1 索引概述
如果要在表中查询指定记录,在没有索引时必须遍历整表,有索引时只要在索引中找到符合查询条件的索引字段值,就可以通过保存在索引中的ROWID快速找到表中对应的记录。
2 索引优点
- 通过创建唯一索引,保证表中每行数据唯一性
- 可以大大加快数据检索速度,这是索引最主要的作用
- 可以加速表与表之间的连接,特别是在实现数据的参考完整性方面
- 在使用分组和排序子句进行数据检索时,可以显著减少查询分组和排序的时间
- 通过使用索引,可以在查询过程中,使用优化隐藏起,提高系统性能
3 索引缺点
- 创建索引和维护索引需要耗费额外的时间与空间,且会随着数据量的增加而增加,聚簇索引,占用的空间会更大
- 对表中的数据进行DML操作时,索引也需要动态的维护,索引越多,DML速度越慢,尤其会影响insert与delete的速度
4 什么时候使用索引
- 索引应该建立在where 子句频繁引用的列上,如果在大表上频繁使用某列或者某几列作为条件执行索引操作,并且检索行数低于15%,则可以考虑在这些列上建立索引
- 如果需要基于某些列执行排序操作,在这些列建立索引可以加快数据排序速度
- 多表连接时使用的连接列,应该建立索引,主要是外键
- 在经常需要搜索的列上,可以建立索引加快搜索速度
5 索引限制
SQL中有很多情况不能使用索引(已经建立索引)
- 使用不等于操作符时(<> !=)
下面的查询及时在empno 列有一个索引查询仍然会执行一次全表扫描
把上面的查询改一下,索引就可以生效了,这是因为改了之后,查询是基于规则的优化器而不再试基于代价的优化器。
通过把不等于符号改成or条件,索引就生效了。
示例:创建一张产品表(tb_product),为该表的product_id列创建索引,以便在使用到该列时提高查询效率。
下面代码用来在product_id列上创建唯一索引:
- 修改索引
索引的修改主要由数据库管理员完成,,修改索引主要涉及到修改索引的存储参数、重建索引、对无用的索引空间进行合并等。
修改索引的语法:
ALTER [UNIQUE] INDEX [user.] index
INITRANS n
MAXTRANS n
REBUILD
[STORAGE ]
说明:
示例:
使用ALTER INDEX语句修改索引参数:
使用ALTER INDEX语句修改索引为逆向索引:
使用ALTER INDEX语句合并索引空间:
- 删除索引
可以使用DROP语句删除索引。
- 作者:Anthony
- 链接:https://github.com/lazyBoy1998/article/oralce_index
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。