当前位置: 首页 > news >正文

Mysql杂志(二十)——MyISAM索引结构与B树B+树

MyISAM索引结构

我们先来说一个这个MyISAM的的索引数据结构,只要明白了主包上一篇的InnoDB的索引结构对这个就很好理解了,这个MyISAM的索引呢就很奇怪,说他是B树吧(B-Tree)也不是,B+树吧(B+Tree)也不是就很奇怪,可能是之前大家都叫B树吧,所以现在的MyISAM的成分就很复杂,但是主包认为他是B+树

首先看这个AI画的图(不好意思偷懒了),很明确的区别就是InnoDB的叶子节点存的是索引以及完整的数据,而MyISAM却是索引和数据指针,然后再拿到这个数据指针再去.MYD文件中查找数据,也就是需要回表。

然后非叶子节点也就是目录页基本上都一样了,除了MyISAM没有槽位数组使用的是记录数组(键值数组)进行二分,其他的基本上一致都是索引列和数据页指针,都需要到数据页才能找到数据。

最后就是InnoDB到叶子节点也就是数据页是双向链表天然利好范围查询和线性查询,而MyISAM的叶子节点却是独立的,要范围查询又要查询循环索引树了。

这个就是架构差异,和对比表格,至于为什么说他既不是B树又不是B+树呢,我们先讲B树和B+树先。

维度

MyISAM

InnoDB

索引结构

纯B树,二级索引无优化

B+树,二级索引指向主键

数据组织

堆表,无序存储

聚簇索引,主键有序

查找效率

需二次查找(回表)

主键索引直接定位

写入性能

追加写入快

需要维护索引有序性

并发控制

表锁,阻塞严重

行锁+MVCC,高并发

适用场景

读密集型静态数据

读写混合的OLTP

B-Tree(B树)

B树是一种自平衡的树数据结构,它维护有序数据,并允许以对数时间进行搜索、顺序访问、插入和删除。B树经过优化,可减少在读写大数据块(如磁盘页)的存储设备上的访问次数,这使其成为数据库和文件系统的理想选择。优化了搜索二叉树的层级太高的问题

说白了就是每个节点(不管是根节点还是内节点还是叶子节点都是)都存有数据,所以快的就很快可能一次io就命中索引了,直接就返回数据了,然后叶子节点没有然后链表,是一个孤岛,范围查询需要查询回溯索引。

B+Tree(B+树)

这个我们都已经了解了,从名字也可以看出来是B树的升级版,为了解决查询性能不稳定因为有的查询在根节点就结束,有的需要到叶子节点,还有缓存可能被非叶子节点的数据占用,挤掉更重要的叶子节点数据,以及B树没有高效的顺序访问机制,范围查询需要多次回溯树结构。

所以B+树一个特点就是只有叶子节点才有数据,非叶子节点都只有指向叶子节点的数据指针,还有就是叶子节点之间是双向链表,增加范围查询和线性扫描的优势。

特性

B树

B+树

影响

数据存储

所有节点都存储数据

只有叶子节点存储数据

B+树非叶子节点可存更多键,树更矮胖

叶子节点

互不连接

通过双向链表连接

B+树范围查询效率极高

查找性能

不稳定(可能在内部节点找到)

稳定(必须到叶子节点)

B树平均查找更快,B+树更稳定

范围查询

效率低(需要中序遍历)

效率高(链表顺序遍历)

B+树适合数据库常见操作

空间效率

较低(每个节点都有数据开销)

较高(非叶子节点无数据开销)

B+树能支持更大索引

扫描全表

需要遍历整棵树

只需遍历叶子链表

B+树全表扫描快得多

这个是B树和B+树的使用场景维度图。

B树的优点:

可能在非叶子节点就找到数据,减少一次查找也就是点查询快,适合对写性能要求高、读模式简单的场景,如文件系统:快速定位文件元数据(inode),通常是随机点查询,还有:​键值存储​:简单的get(key)操作,没有复杂查询,​内存受限环境​:对树高度敏感,希望尽量减少内存占用。

B+树的优点:

范围查询极快​:叶子节点链表使BETWEENORDER BYGROUP BY等操作极快。

高缓存效率​:非叶子节点更小,更多热点数据可缓存。

查询稳定​:所有查询都必须到叶子节点,性能可预测。

全表扫描快​:顺序遍历叶子链表即可。

典型的使用场景有:关系型数据库(OLTP)​​:大量范围查询和连接操作。数据仓库(OLAP)​​:复杂的分析查询通常涉及大规模数据扫描。任何需要高并发和稳定响应的系统

系统类型

读模式

写模式

推荐引擎

OLTP数据库

点查询+范围查询

均衡

B+树

OLAP数据仓库

复杂范围查询

批量导入

B+树

缓存系统

极快点查询

高吞吐

哈希表

日志/事件流

少量范围查询

极高吞吐

LSM-Tree

文件系统

元数据点查询

频繁小写

B树

为什么说MyISAM都不像?

从上面应该也可以知道为什么了吧,不想树的原因是只有叶子节点才有数据指针其他就没有,这一点和B+树一样,而叶子节点又不是双向链表这一点又不是B+树,又莫名其妙和B树一样,所以就谁都不像,但是称为B树主包认为当时还没有B+树,MyISAM从B树中进行升级,而后面InnoDB又从MyISAM的数据结构进行优化,才有后面的B+树。

总结

本篇主要讲了MyISAM的索引结构以及B树和B+树的区别。

http://www.dtcms.com/a/391209.html

相关文章:

  • Java 大视界 -- 基于 Java 的大数据实时流处理在金融高频交易数据分析中的应用
  • BonkFun 推出 USD1:Meme 币玩法的新入口
  • flutter在包含ListVIew的滚动列表页面中监听手势
  • Redis 三种集群模式详解
  • 打开hot100
  • Ant-Design Table中使用 AStatisticCountdown倒计时,鼠标在表格上移动时倒计时被重置
  • Linux crontab 定时任务工具使用
  • 阿里云RDS mysql8数据本地恢复,与本地主从同步(容器中)
  • 记录一次mysql启动失败问题解决
  • LeetCode算法练习:35.搜索插入位置
  • (1) 为什么推荐tauri框架
  • 嵌入式面试高频(八)!!!C++语言(嵌入式八股文,嵌入式面经)
  • Spring AI开发指导-工具调用
  • Linux 基本命令超详细解释第二期 | touch | cat | more | cp | mv | rm | which | find
  • [x-cmd] 安装指南
  • Altium Designer(AD24)原理图Move移动功能详细介绍图文教程
  • 部署java程序,服务器报403 Forbidden 问题的终极解决方案
  • 【LeetCode】链表经典问题解析:环形、回文与相交
  • 电磁超材料及其领域应用优势
  • STM32与Modbus RTU协议实战开发指南-fc3ab6a453
  • ArrayList 与 LinkedList 深度对比:从原理到场景的全方位解析
  • Ubuntu和windows复制粘贴互通
  • 银行回单 OCR 识别:财务自动化的 “数据入口“
  • 深兰科技陈海波的AI破局之道:打造软硬一体综合竞争力|《中国经营报》专访
  • 面试经验之mysql高级问答深度解析
  • 高质量票据识别数据集:1000张收据图像+2141个商品标注,支持OCR模型训练与文档理解研究
  • 嵌入式音视频开发——FFmpeg入门
  • MySQL索引篇---B+树在索引中的工作原理
  • 强化学习训练-数据处理
  • VirtualBox为ubuntu系统设置共享文件夹