news 2026/4/18 11:23:19

面试官:MySQL表中有2千万条数据,B+树层高是多少?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试官:MySQL表中有2千万条数据,B+树层高是多少?

MySQL 默认存储引擎是 InnoDB,跟 MyISAM 相比,InnoDB 支持事务、支持行级锁、支持主键和外键、索引存储上使用 B+ 树。

那如果 MySQL 一张表存储了 2 千万条数据,B+ 树层高是多少呢?今天来聊一聊这个面试题。

InnoDB 存储

在 InnoDB 存储引擎中,是以索引组织表的方式存放数据的,也就是表中数据是根据主键顺序以索引的形式存放的。数据存储在 B+ 树中,每一个索引对应一棵 B+ 树。

我们知道,计算机中,磁盘存储数据的最小单位是扇区,一个扇区大小为 512B。而文件系统的最小单位是块,一个块大小是 4K。

那 InnoDB 具体是以什么单位来存放数据呢?InnoDB 是以页为单位存放数据的,一个页大小是 16K。如下图:

B+ 树索引

跟 MyISAM 不一样的是,InnoDB 使用聚簇索引,叶子节点存储数据,不用独立的行存储。下面是 MyISAM 的存储结构:

InnoDB 主键索引每个叶节点包含了主键值和所有的剩余字段。二级索引的叶节点中存储是索引键和主键值,以此作为指向行的“指针”。如下图:

B+ 树叶子节点存储了数据,非叶子节点(索引节点)则存储了 key 和指针。这样存储的优势是可以在索引节点通过二分查找快速找到数据所在页,时间复杂度为 O(log n)。找到数据页后再去数据页中找数据就很容易了。

前面讲到,InnoDB 以页为单位来存储数据,每页 16k,那如果一条数据占 1k 的空间,那每页可以存储 16 条数据。

而索引节点保存的是 key 和指针。假如 key 的数据类型是 bigint,占 8B,指针大小在 InnoDB 中固定占 6B,那索引节点占空间大小为 14B,那每页存放的索引节点就是 1170。

16 * 1024B/14B = 1170。

因此假如 B+ 树高度为 2 层,则存放的数据为 1170(页)* 16(每页 16 条数据)= 18720。 同理如果 B+ 树高度为 3 层,则存放的数据为 1170(页)* 1170(每页 1170 索引节点)* 16(每页 16 条数据)= 21902400。

篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc

需要全套面试笔记及答案
【点击此处即可/免费获取】​​​

回到问题,一张表中有 2 千万条数据,B+ 树有几层?如果小于等于 21902400 条,则 B+ 树是 3 层,如果大于 21902400,则 B+ 树是 4 层。

注意前提条件,一条数据占用空间大小是 1k,索引节点(索引节点)中 key 占用空间为 8B。

总结

本节以一道经典的面试题,引出了 MySQL 中 InnoDB 的存储结构。理解了这个存储结构,就可以很好的理解索引和数据查找原理了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:19:19

【Vue】脚手架 v-html v-text v-bind v-on v-show v-if v-for v-model

文章目录 Ⅰ. 脚手架一、Vue开发方式1. 传统开发模式2. 工程化开发模式 二、准备工程化环境1. 安装 Nodejs2. 安装 yarn 或 pnpm 三、创建Vue工程化项目四、认识脚手架目录及文件五、分析3个入口文件的关系六、Vue单文件七、setup简写 插值表达式 响应式1. 传统写法2. 现代写…

作者头像 李华
网站建设 2026/4/18 9:54:20

经典智能体范式

一、引言:为什么需要智能体 1.1 大模型的局限 之前的GPT-4等大模型停留在聊天框中且存在一些问题:一是“幻觉”,可能生成错误信息或不存在的内容;二是时效性不足,对未训练的新内容缺乏准确认知;三是复杂任…

作者头像 李华
网站建设 2026/4/18 10:42:40

瀚高数据库常用驱动连接字符串

文章目录 文档用途详细信息 文档用途 本文列出了瀚高数据库常用的驱动连接字符串以便在测试和适配工作中使用驱动连接数据库。 详细信息 1、常见驱动字符串示例 以金蝶中间件为例 驱动:com.highgo.jdbc.Driver URL: jdbc:highgo://ip:端口号/数据库名 jdbc:high…

作者头像 李华
网站建设 2026/4/17 21:48:33

戴西软件发布3DViz设计与仿真数据轻量化平台

戴西软件发布3DViz设计与仿真数据轻量化平台以Web三维协同重塑工业研发数据的使用方式。近日,戴西软件正式发布3DViz设计与仿真数据轻量化软件。作为iDWS智能化研发平台的重要组成组件,3DViz面向工业研发中高价值的 CAD设计数据与CAE仿真结果&#xff0c…

作者头像 李华
网站建设 2026/4/18 8:18:14

python智能水务巡检预警应急调度与决策系统的设计与实现

目录智能水务巡检预警应急调度与决策系统的设计与实现摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作智能水务巡检预警应急调度与决策系统的设计与实现摘要 该系统基于Python技术栈,结合物…

作者头像 李华