Oracle索引原理

oracle 专栏收录该内容
1 篇文章 0 订阅

索引原理

  1. oracel中索引类型很多,默认采用B树索引。
  2. oracle中的索引与mysql中的索引不一样,oracle中索引是存储了索引列的值以及rowid值。而mysql索引分为聚集索引,非聚集索引。其中聚集索引只能有一个。
  3. oracle中索引的主要分为根,茎,叶子三部分。索引列值都是存放在叶子节点上,茎只是存放了叶子节点的相关信息。
  4. oracle中的索引反应的是逻辑结构,不是物理结构。索引创建的时候,是先创建叶子节点,然后再创建茎,最后创建根。从索引的创建过程分析可以看出来。
  5. oracle中数据单位是以块为单位的,数据存储满一个数据块block,再去存储下一个数据块block。

索引特点

  1. 索引高度一般比较低
  2. 索引是按照有序排列的。
  3. 索引存储列值及rowid值

如何建索引

  1. oracle会在主键上创建索引
  2. oracle会在非空唯一索引列上创建索引。
  3. 经常出现的谓词,即出现在执行频率很高的SQL查询的where条件中的列上。
  4. 索引最好有单独的表空间,有利于备份和维护

索引缺点

  1. 索引需要占据存储空间,索引能提供查询速度,但是维护和更新却浪费空间。因为索引是有序排列的。

影响性能缘由

  1. oracle中sql语句,在查询时影响性能主要有逻辑读,排序,花费时间time代价cost(cpu)全表扫描等多个因素。

索引应用

  1. order by
    1.1 order by 列名。会对order by 后面的列进行排序,
  2. distinct
    2.1 distinct 会进行排序

索引压缩

  1. 在索引列中(一列或者多列),如果有多行数值相同,为了提供查询数据速度,可以将索引进行压缩存储。索引最终也是要存储在数据块上,压缩索引是为了减少扫描数据块的个数。
  2. 可以采用compress N子句方式创建压缩索引。
  3. create index index_name on tableName(col1,col2) compress N。
    3.1 如果N为1,则会对第一列进行压缩存储,N为2,则会对第一列和第二列压缩存储。

组合索引设计

  1. 适当场合尽量避免回表读
  2. 组合索引中的列数越少越高效
  3. 组合索引中有2列时,情况又不一样:
    3.1 组合索引中,等值查询时,无论哪列在前在后都无所谓。
    3.2 组合索引的2列中,如果一列是范围查询,一列是等值查询,则一定要把等值查询放在前面,范围查询列放在后面才能使索引高效。这里是创建索引的时候,等值查询列在组合索引的最前面,范围列在最后面,不是sql语句中的书写顺序。
  4. 如果单列的查询与组合索引的前置列查询一样,则单列可以不用创建索引,直接利用组合索引来检索数据。最好将该列放在组合索引的第一列
  5. 经常一起出现在where字句中的列可以创建索引

函数索引

  1. 在SQL查询中,如果where条件中的列上创建了索引,但是在该索引列上使用了函数,则oracle函数会使当前列上的索引失效。
  2. 对于上述情况,需要创建函数索引。
  3. 创建函数索引需要在创建语句中指定使用的函数和列。create index index_name on table_name(函数(列名))
  4. 如果创建了函数索引,则不能直接修改。需要先删除索引,再修改列,然后重建。

不可见索引

  1. 有时候想增加一个索引而又不影响线上应用的性能,即通知SQL优化器默认不使用该索引。需要在创建索引的时候,设置为不可见。
  2. create index index_Name on table_name(col1,col2) invisible。
  3. 创建完索引后,需要确保optimizer_use_invisible_indexes的值为true。可以使用alter system set optimizer_use_invisible_indexes= true
  4. 使用hit提示,可以显示通知优化器使用该索引。

查看表中索引方式

  1. 可以在表user_indexes中查看索引方式 。
  • 0
    点赞
  • 2
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值