mysql的b+树最高有几层

mysql io描述

mysql的io就是从磁盘上读取数据写入到内存,这是一次io操作,

从内存中读取数据写入到磁盘,也是一次io操作

页描述

mysql的底层是根据页存储数据的,一页就是16kb=16384b

每一个节点,都是一页数据

第一层叫做根节点,也是非叶子节点

最后一层叫做叶子节点

不是最后一层的,都叫做非叶子节点

页与页之间存在着双向链表,减少io操作

mysql在读取数据的时候,不是从磁盘一行一行的拿数据,而是一页一页的拿

节点存放的内容

非叶子节点存储的都是主键的值,和页码,也就是指向下一层节点的位置

叶子节点会存储完整的数据,也就是你的表里面的每一行数据,也叫做行记录

非叶子节点存放的数据

我们的主键是bigint类型,那么就是占8个字节,页码是6个字节,一共14个字节

那么非叶子节点的一页数据,就是16kb/14b

也就是16384b/14b=1170条数据

叶子节点存放的数据

假设一行能放1kb的数据,那么一页数据就能放16条,

也就是说一个叶子节点就能放16条数据

mysql数据存放的位置

通过下面的命令查看存储的目录

show VARIABLES like '%datadir%'

进入linux中对应的位置,如果是使用docker安装的,那么就需要进入容器里面

可以看到dmg就是我们自己创建的数据库,然后进入dmg

可以看到,有一个t_user.ibd文件,这个就是自己的表的索引和数据存放的信息

 查看这个文件,可以看到其中的一些内容,就是我们表里面的数据

2层b+树能够存放多少数据

第一层的非叶子节点有1170个数据,第二层每个叶子节点都有16条数据

那么2层的b+树一共就是1170*16=18720条数据

3层b+树能够存放多少数据

第一层的非叶子节点有1170个数据

第二层的每一个非叶子节点有1170个数据

第三层的每一个叶子节点有16条数据

那么3层的b+树一共就是1170*1170*16=21902400=2千多万的数据

在mysql进行select查询的时候,最多3层io就能查询到数据

注意这里的是3层io,不是3次io

那么最终的结论就是,mysql的b+树高度,最多3层或者4层 

如果一张表的高度超过了3层,那么就要考虑分库分表了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值