mysql底层索引数据结构

索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。
索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去找。

mysql 的底层索引的数据结构是B+树,那为什么是B+树呢?为什么不是哈希索引?为什么不是平衡二叉树?以及为什么不是B树

在这里给大家分享一下这个网站https://www.cs.usfca.edu/

在这里插入图片描述
可以非常直观的看到数据结构的一系列变化 让我们更容易看懂

先看hash索引
在这里插入图片描述
众所周知Hash结构查找和插入都很快 ,假如我们要找5那么它就可以根据索引直接找到5

那么为什么Mysql没有采用Hash来构建呢?原理其实很简单,Hash索引是无序的,如果是无序的话你就不能进行这个范围查找
比如select id from tb where t.num>10 and t.num<20这样子
而且有时候值不同Hash值相同,那么还得一个个比对,效率也会降低

再来看看平衡二叉树
在这里插入图片描述
假设我们找10的话就需要比对3次,次数根据树的高度来算,算是平衡二叉树的一个缺点,除此之外还有一个缺点,依旧是大于小于的范围查找问题。假设我们要查找大于5 的数
在这里插入图片描述
那么找到5以后需要回旋一个一个去拿数字,假如数据比较多那么速度就会变得很慢。

再看一下平衡二叉树升级版 B树(B-树)
在这里插入图片描述
他一个节点存储两个值的方式降低了平衡二叉树的一个高度问题,你越矮查找就越快嘛,同样找5,二叉树走了3次而B树走了2次。那么B树解决了回旋查找(范围查找)的问题嘛?答案是没有 它也得一个一个回去找…

再看一下B+树
在这里插入图片描述
其实跟B树没有太大区别,只是底部多了一个链表,这个链表是排序过的,由此可以解决范围查找–查找大于5的数直接把5后面全部拿出来即可。而且它的子节点是只存了Key的单值,而链表的节点存了key+value两个值。

总结:hash索引查找快但是无法范围查找,AVL trees查找速度基于树的高度,可以进行范围查找但是速度较慢
B- trees查找速度优于AVL trees 但是范围查找速率和AVL trees一样,最后就是B+ trees, 结合了B- trees 优于AVL trees查找速度的优点 再结合单向有序链表使范围查找的速度也加快了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值