MySql底层数据结构的实现

大家都知道MySQL的底层索引的数据结构是B+树。

为什么不用hash结构呢?
hash结构是无序的,不能够提供范围性查找,比如我要查 >= 某个数的或者小于某个数的结果就不能实现,但是进行单个查找hash表是非常快的;并且你如果想要进行排序操作的话也是不可以的,因为下标和该下标对应的值是1 1对应的,排序后就失去了意义。如果当你的hash值是相等的时候会比较慢

为什么不用AVL结构呢?
树的高度越高,查找的速度越慢,最慢时为logn, 当数据量大于一定量级的时候就会出现问题。除此之外,当你的查找大于某一个数的时候,如下图
在这里插入图片描述
查询一个大于5的数要往回查找,并且要往后扫面,当数据大于一定量级之后会非常慢

为什么不用B树?插入10个数
由于每个节点可以存储两个值,树的高度就降低了。查找某个数速度快鱼AVL.但是和AVL一样也有回旋查找的问题。

在这里插入图片描述

B+树就解决了回旋查找的问题,插入10个数
在这里插入图片描述
可以看到非叶子存储了两次,但是上面的数只存储了key值,并没有存地址;叶子节点相当于就是一个链表,它不仅存储了key值,还保存了地址的值。如果还是和上面的查找的东西一样,查找大于5的数,由于链表里面的数是有序的,那么我们可以直接将5后面的数直接拿出来用就可以了,就省略了回旋查找部分。范围查找速度非常快。

猜你喜欢

转载自blog.csdn.net/qq_44879626/article/details/108415055