一、先导:
要想了解B 树索引,首先要了解树的数据结构,二叉树,平衡二叉树,B-树,B+树。
1、二叉树: 每个结点最多有两个
子树的树结构
二叉树的特性:
练习:[31 18 73 9 27 37 99]
上面数据经过一系列插入后:变成了有序的结构
,且符合二叉树的特性
但是如果是同一组数[9 18 27 31 37 73 99],升序后再排序:
这种情况出现了严重的倾斜
,这是比较极端的情况 ,二叉树变成线性结构了,查询效率明显降低,没有发挥出二叉树的优势。
为了不让二叉树出现严重倾斜,提出了平衡二叉树的概念。
2、平衡二叉树: 特殊的二叉树
比二叉树多了一个特性:
左右2个子树的高度差的绝对值不会超过1,并且左右2个子树都是平衡二叉树。
一个平衡二叉树最多能容纳:20+ 21+22+…+2h-1,h为高度。
这样计算100w的数据,高度为20,从有着100w条数据的平衡二叉树中找一个数据最多20次,如果是内存,效率很高,但是数据库中的数据基本上是放到磁盘的
,每读取一个二叉树结点就是一次磁盘IO
,找一条数据,经过20次磁盘IO,性能就很差了。于是考虑把平衡二叉树压缩(由高变成胖),即B-树。
3 、B-树 :
特性:
我们都知道数据库的数据是一条条存在的。
思考: 数据库以B-树数据结构存数数据,数据是如何存放的呢?
把元素部分拆成了key-data形式,key就是主键,data就是数据。
4、B+树:
B+树是在B-树基础上的一个优化。
特点:
思考:
B-Tree or B+Tree?位于同一个磁盘块的数据会被一次性读取出来,而不是需要什么读取什么
。即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这是因为计算机中有个著名局部性原理:一个数据被用到时,其附近的数据也通常会马上被使用。
优缺点:
二、索引的使用:
创建索引原则:
索引使用条件:
三、索引的分类:
B树,函数,位图,反序,反向,分区
四、索引的运维: 索引的作用:保证业务的完整性 索引的优点:提高查询速度 索引的缺点:增加存储空间,降低DML语句的效率 索引虽然能加快检索速度,但是在有些情况下,使用索引查询一样会很慢,这时候需要分析数据,考虑重建索引