Oracle 索引梳理

什么是索引?

索引就相当于目录,按目录查找会加快速度。
目录按一定规则排序,例如区间查找(按日期检索):只需要查找开始的最小值,和结尾的最大值。其它的结果在区间之中,而无需再全盘扫描(如果不排序,谁也不知道区间值会出现在哪里)。

索引的数据结构

垂直方向是B树,在水平方向是双向链表
可以从索引的数据结构观察出索引的分段查找
BTree (blance tree)与二叉树(Binary Tree)不同之处在于无论检索哪条数据, BTree的检索层数都是一样的。
在这里插入图片描述

索引的分类

1.B*Tree索引 (默认索引,保存经过排序过的索引列和对应的rowid值)
唯一索引
反向键索引:避免相邻的数据存储在一个数据块中,引起多个实例访问时的等待。
降序索引:select * from t order by id asc,time desc
create index desc_t_idx on t (id asc,time desc);
检索过程中无排序步骤,提高效率。
聚簇索引:
列基数大时适合使用B树索引
2.位图索引
基数小的列适合简历位图索引(例如性别等枚举字段)
3.组合索引:适用于多个筛选条件 如:where id>10,score>60
4.基于函数的索引
当经常要访问一些函数或者表达式时,可以将其存储在索引中,这样下次访问时,该值已经计算出来了,可以加快查询速度
函数索引既可以使用B数索引,也可以使用位图索引;当函数结果不确定时采用B树索引,结果是固定的某几个值时使用位图索引
函数索引中可以用len、trim、substr、upper(每行返回独立结果),不能使用如sum、max、min、avg等分组函数

1.聚集索引
目录的顺序等同正文的顺序。查询结果排序,分段。按索引查找的值在正文的一个连续的段中。
特点:查询结果如果在该分段中没有,其它地方也不会有。
每个表只能有一个聚集索引(目录只能按照一种方法排序)
优点:区间查找效率高。例如查询某一段的时间,只需检索出开头结尾数据即可(其它数据在二者之间)
2.非聚集索引
目录的顺序不等同正文的顺序。查询结果不排序。
特点:散乱分布在整个正文中。

发布了21 篇原创文章 · 获赞 6 · 访问量 9328

猜你喜欢

转载自blog.csdn.net/qq1032350287/article/details/86718005