当前位置:网站首页>mysql的索引结构为什么选用B+树?
mysql的索引结构为什么选用B+树?
2022-08-02 14:10:00 【星星泡个饭】
问题:为什么索引结构默认使用B+Tree,而不是B-Tree,Hash,二叉树,红黑树?
哈希表
哈希表可以进行数据的快速检索。哈希表会使用哈希算法。
哈希算法:也叫散列算法,就是把任意值(key)通过哈希函数变换为固定长度的 key 地址,通过这个地址进行数据查询的数据结构。
算法时间复杂度分析来看,哈希算法时间复杂度为 O(1),检索速度非常快。比如查找 id=7 的数据,哈希索引只需要计算一次就可以获取到对应的数据,检索速度非常快。但是 Mysql 并没有采取哈希作为其底层算法。即hash算法针对范围查找效率太低,需要把所有数据找出来加载到内存,然后再在内存里筛选筛选目标范围内的数据。
二叉查找数(BST)
二叉查找树支持快速查找数据,时间复杂度为O(logn),并且可以解决范围查找的问题
如上图如果想找到id>5的数据,只需要找到节点6及其右子树的数据即可,范围查找比较容易实现。
普通二叉树的致命缺点:极端情况下会退化为线性链表,时间复杂度为O(n),性能急剧下降
数据库表的主键id一般为自增,上述的线性结构查找问题必然出现,而且频率还很高
红黑树
二叉查找树不平衡,可以通过树节点的自动旋转和调整来解决,从而保证二叉树的查找性能。最常见的思路是平衡二叉树和红黑树。
红黑树可以自动调节树的结构,当二叉树不平衡时,红黑树会自动左右旋转和节点变色,保持基本的平衡,时间复杂度为O(logn),但是红黑树也会出现“右倾”退化现象,只不过极端退化情况比平衡二叉树好,但是也没能达到预期
平衡二叉树(AVL)
先来考虑AVL 树的优点,它的查询效率为O(logn),不存在极端情况,可以进行范围查找和排序。
但是为什么不选取AVL树作为MySQL索引的数据结构?
主要是磁盘IO因素的影响。如果使用AVL树,每一个树节点,只存储一个数据。比对一次树节点,即进行一次磁盘IO操作,如果数据量大了,那磁盘IO的次数会很高,消耗大量的时间
所以,设计数据库索引的时候,还需要考虑怎么尽可能减少磁盘的IO次数。
由于磁盘读取1B和1KB的数据消耗的时间基本是一样的,所以可以在一个节点存储更多的数据,即一次磁盘IO读取更多数据,即可解决问题。所以就考虑到了B树。
B树
B 树的优点,优秀检索速度,时间复杂度:B 树的查找性能等于 O(h*logn),其中 h 为树高,n 为每个节点关键词的个数; 尽可能少的磁盘 IO,加快了检索速度; 可以支持范围查找。
B-Tree数据分布在各个节点之中,每个节点存储的数据量是有限的,MySQL希望一个节点可以尽可能多的存储数据,因此采用了B+树
B+树
B树一个节点存储的是数据,一个节点中存储不了太多数据;B+树的关键字全部存放在叶子节点中,非叶子节点用来做索引,而叶子节点中有一个指针指向一下个叶子节点。在 MySQL 数据库中数据页的大小是固定的,Innodb 引擎数据页默认大小为 16 KB。B+ 树这种做法是为了让树的阶数更大,让树更矮胖。进行查询的时候,磁盘 IO 次数就会减少,查询效率也会更快。
B+数叶子结点采用链表串联,更便于范围查找。而B树需要中序遍历。
边栏推荐
- win10系统更新错误代码0x80244022怎么办
- 镜像法求解接地导体空腔电势分布问题
- 编译error D8021 :无效的数值参数“/Wextra” cl command line error d8021 invalid numeric argument ‘/wextra‘
- PyTorch⑥---卷积神经网络_池化层
- 13.56MHZ刷卡芯片CI521兼容cv520/ci520支持A卡B卡MIFARE协议
- PyTorch(11)---卷积神经网络_一个小的神经网络搭建model
- Mysql连接错误解决
- PyTorch(13)---优化器_随机梯度下降法
- 使用libcurl将Opencv Mat的图像上传到文件服务器,基于post请求和ftp协议两种方法
- 系统线性、时不变、因果判断
猜你喜欢
随机推荐
Please make sure you have the correct access rights and the repository exists.问题解决
pygame绘制弧线
Win10安装了固态硬盘还是有明显卡顿怎么办?
FP6293电池升压5V-12V大电流2APWM模式升压方案
还是别看学位论文
How to reinstall Win7 system with U disk?How to reinstall win7 using u disk?
机器学习---监督学习、无监督学习
“非图灵完备”到底意味着什么
Win11 computer off for a period of time without operating network how to solve
PyTorch(14)---使用现有的模型及其修改
基于深度学习的配准框架
设备驱动框架简介
win10无法直接用照片查看器打开图片怎么办
Daily - Notes
Win7 encounters an error and cannot boot into the desktop normally, how to solve it?
日常-笔记
Makefile容易犯错的语法
Win10 can't start WampServer icon is orange solution
LORA芯片ASR6505无线远距离传输8位MCU
关于c语言的调试技巧









