索引以及索引底层数据结构

一、什么是索引?

索引(index)是数据库高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式指向真在的数据,这种数据结构就是索引。

二、为什么选择B+树

为什么不使用二叉树、B树,要使用B+树呢?

1、二叉树

在看B+ 树之前,我们先看一下二叉树 

左边这个二叉树的时间复杂度是O(log n),而右边这个二叉树查询的时间复杂度是O(n),就已经退化成一个链表了,二叉树的时间复杂度不稳定

2、红黑树

那么为什么不实用红黑树呢?

优点:红黑树的时间复杂度很稳定,它的时间复杂度是O(log n)

缺点:红黑树也是一个二叉树,每个节点只有两个分叉(只有两个字节点),如果要存储1000万的数据,那么它的层级就会很高(很多层),如果要查数据的话,还是不够高

3、B-树

B-Tree,B树是一种多叉路平衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。

以一棵最大度数为5(5阶)的B-Tree举例,那这个B树的每个节点最多存储4个key。 

灰色部分是指针,指向子节点的数据,子节点的数据大小都在两个蓝色数据之间

蓝色部分表示数据(key,键值)

绿色部分表示真正的数据(索引指向的数据)

跟二叉树一样,里面的数据都是左边小右边大,但是相比二叉树来说,由于最多有4个key和多个分支,B树的层级就比较短,可以称为矮胖树。层级短,查询的效率就高

4、B+树

B+树是在B树的基础上进行的一种优化,使其更适合实现外存储索引结构,InnerDB存储引擎就是使用的B+树实现其索引结构

首先,B+树也是多阶的,不同的点在于,

1、B+树的非叶子节点,只存储指针和key,不存储数据

2、上面的非叶子节点,只用来找到叶子节点的数据,而且非叶子节点上的数据也能在叶子节点上找到,比如图中的38、58等

3、叶子节点之间使用双向指针进行互相连接,如图中的6,12和16,18相连

相比于B树,B+树有以下几个优势:

1、磁盘读写代价相比B+树更低;

如图中所示,如果要查询12 这个数据,由于B树的非叶子节点也是包含数据的,所以B树会加载出38中的(指针、key、数据),再加载出16和29中的(指针、key、数据),最后查询到12中的(指针、key、数据);

而B+树只有在叶子节点存储数据,非叶子节点只保存 指针和key值,只会查询12中的数据,前面的38和16则只和他们对比了key值,还有就是使用了38和16中的指针

2、查询效率B+树更加稳定

由于B+树的数据都保存在叶子节点,所以要查询什么数据,所要查询的层级(高度)是差不多的,查询效率更稳定

3、B+树便于扫库和区间查询

比如我们要查询6-34之间的数据,B+树,只要查询到6,再往右,使用双向指针进行查询到34为止即可,区间查询很快

综上所述优点,MySQL使用了B+树的索引结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值