mysql深度剖析一(底层数据结构)

本文深入探讨MySQL的演变,重点解析B+树索引的原理,包括磁盘IO次数、页的关系、数据结构区别。对比B树与B+树,分析MyISAM与InnoDB的底层差异,强调主键与非主键索引的存储方式,解释覆盖索引的概念及其重要性。建议使用整型自增主键以优化索引构建效率。

衍变

二叉树
二叉查找树(容易形成链表)
二叉平衡树(可以自动调整高度,但层数容易过高)
多路平衡查找树即B树(层数控制了,但每个节点存有数据,导致每个磁盘页存不了多少索引,导致层数升高)
传统加强版多路平衡查找树即B+树(每个磁盘页可以存更多索引,进一步控制了层数,但最底层是单向链表)
innodb的B+树(叶子节点是双向链表,提升了范围查找与排序效率)

索引是啥

一种为了使查找方便而 排好序 的数据结构

查找需要几次磁盘io呢

查找索引为30的数据
在这里插入图片描述

1)先将B+数的根节点加载进内存中,发生了一次io;
2)30大于15,小于56,找到了30所在的磁盘页地址,再次加载进内存,发生了第二次io;
3)30大于20小于49,进一步找到了30所在磁盘页地址,再次加载进内存,发生了第三次io;
4)最后找到了索引为30所在地址及其数据;
通常根节点会常驻内存

B+树与页的关系

在这里插入图片描述

一页的大小是16384个字节,即16kb,可以通过执行show global status like ‘Innodb_page_size’来查看,此值可以改,但不推荐。为啥是16kb呢,试想若一页设定为非常大,即一页存放所有数据,只经过一次io就将数据加载进内存,对内存压力很大,而且一次io加载几百兆,甚至更多,也弄不了那么多,时间也长。

每一页存的是啥,可以存多少呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orcharddd_real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值