Oracle索引

oracle索引的区分

从功能上区分
主键索引
非主键索引

从唯一性上区分
唯一索引
普通索引

从实现原理上区分
B树索引(其实是B+树索引)
B树和B+树的区别是
B+树把数据到放到叶子节点上
B树的数据既可以放到叶子节点上也可以到非叶子节点上
B-树其实就是B树,只是翻译的问题
红黑树与B树的区别就是 
红黑树只有两路分叉,B树的节点上可以有多个元素,并且有多个分叉
红黑树和二叉树的区别就是
红黑树会自平衡,能保证树到每一个叶子节点的的层级不会相差太多

create index tiger_index on tigerlearn(tiger)
pctfree 25 --可以默认不写
tablespace Tiger_TS;

反向索引
反向索引是在字段的内容按照方向的方式来存储索引
比如字段的内容是:1234,那么那么按照:4321的方式来存储索引
在实际的业务场景上,主键采用自增的方式进行生成
在主键索引的检索过程中,多个线程容易造成一个块的频繁竞争
采用方向索引就可以解决这个问题

create bitmap index tiger_index_reverse on tigerlearn(tiger) reverse
tablespace Tiger_TS;

位图索引
在B树索引中,通过在索引中保存排序的索引列的值以及记录物理地址ROWID来实现快速查找
但对于一些特殊的表,B树索引效率较低,比如一个表中有一列,数据只有正确、错误两个取值
如果建立B树索引,使用该索引对表进行检索时,将返回近一半的数据,效率非常低下
这种情况我们定义一个变量“基数”,比如一个表有10000行数据,一列只有100个取值
基数为1%。Oracle推荐,当一个列的基数小于1%时,适合建立位图索引

create bitmap index tiger_index_bitmap on tigerlearn(tiger)
tablespace Tiger_TS;

函数索引
基于函数的索引是常规的B树索引,但它存储的数据是由表中的数据应用函数后所得到的,
而不是直接存储表中的数据本身

create index tiger_index_fun on tigerlearn(lower(tiger));


聚簇索引和非聚簇索引
一个表自有个聚簇索引
主键是聚簇索引
聚簇索引中字段的内容和表的记录是放到一起的
非聚簇索引的叶子节点上存储的并不是真正的行数据,而是主键 ID,
所以当我们使用非聚簇索引进行查询时,首先会得到一个主键 ID,
然后再使用主键 ID 去聚簇索引上找到真正的行数据,我们把这个过程称之为回表查询。


什么时候适合创建索引
1.where 后面频繁使用的查询条件
2.order by,group by后面的排序字段
3.表关联的条件字段
4.多个字段查询的时候,联合索引优于单索引
5.区分度特别高(散列性高)的列适合用B树索引
6.区分度特别低的列适合创建位图索引
7.区分度不高不低的列不适合创建索引
8.字段的数值有唯一性的限制列适合创建联合索引


什么时候索引会失效
1.发现全表扫描的时候表还更快的时候
2.对列进行计算或者是使用函数,则该列的索引会失效
3.不匹配数据类型,会造成索引失效
4.where语句中使用了IS NULL或者IS NOT NULL,会造成索引失效
5.like查询是以%开头
6.在WHERE中使用OR时,有一个列没有索引,那么其它列的索引将不起作用
7.如果mysql估计使用全表扫描要比使用索引快,则不使用索引
比如使用exist,in发现全表扫描反而要更快的过程中
8.mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描


联合索引

最左前缀法则
如果索引了多个列,要遵循最左前缀法则
查询从索引的最左前列开始,并且不能跳过索引中的列

联合索引失效
1.条件语句中出现or 则联合索引无效
2.联合索引中其中一个字段使用了>或者<来判断范围时,当前字段的索引生效,下一个联合索引失效
3.其他情况当个索引失效,因为最左匹配原则导致当前索引失效的,下一个联合索引也失效
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值