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的b+树最高有几层_第1张图片

mysql数据存放的位置

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

show VARIABLES like '%datadir%'

mysql的b+树最高有几层_第2张图片

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

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

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

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

mysql的b+树最高有几层_第3张图片

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

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

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

mysql的b+树最高有几层_第4张图片

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

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

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

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

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

mysql的b+树最高有几层_第5张图片

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

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

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

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

你可能感兴趣的:(mysql,mysql,b树,数据库)