MySQL面试题——索引、B+树

总结于JavaGuide

知识点总结

索引是什么?

索引为什么快?

MySQL 索引底层数据结构是什么?

B+树拓展思考

树的高度极低:百万级数据的 B + 树,高度仅需 3~4 层。一次查询最多只需要3~4 次磁盘 IO,就能定位到目标数据。

1.为什么是3~4层?

2.为什么层数就是IO数?

回答

1. 索引是什么?

索引是数据库中为提升数据查询效率而创建的有序数据结构,本质是对数据表中一列 / 多列的值进行排序的映射关系,类似书籍的目录 ------ 通过索引可直接定位到目标数据的物理位置,避免全表扫描。

2. 索引为什么快?

核心是减少磁盘 IO 次数 + 避免全表遍历

  • 索引将无序的原始数据转化为有序结构,能快速定位数据位置,无需逐行扫描整张表;
  • 数据库性能瓶颈主要在磁盘 IO,索引的紧凑结构可大幅减少磁盘 IO 的次数(只需遍历索引树而非全表数据);
  • 索引的有序性还能直接支持排序、范围查询等操作,无需额外排序计算。

3. MySQL 索引底层数据结构是什么?

MySQL 主流存储引擎的索引底层核心是B + 树

  • InnoDB/MyISAM 引擎默认使用 B + 树 作为索引底层结构(两者的 B + 树 实现略有差异,如 InnoDB 是聚簇索引,MyISAM 是非聚簇索引);

拓展思考

  1. **为什么 3~4 层?**分支因子(每节点子节点数)大(100~1000),叶子节点数随高度指数级增长(f^(h-1))。百万级数据下,3 层可容纳约 100²=1 万到 1000²=100 万,4 层可容纳约 100³=1000 万到 1000³=10 亿,因此高度为 3~4 层。

  2. **为什么层数 = IO 数?**B + 树的每个节点对应一个磁盘块,一次 IO 只能读取一个磁盘块。查询时,需要从根到叶子依次读取路径上的每一层节点,因此层数等于磁盘 IO 次数。

相关推荐
To_OC5 小时前
面试被问了三回三栏布局,这次我终于把 BFC 那层窗户纸捅破了
前端·css·面试
小飞学编程...5 小时前
【哈希表】
数据结构·哈希算法·散列表
城管不管6 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅6 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
倔强的石头1066 小时前
向量数据库从相似度检索走向融合数据底座
数据库
To_OC6 小时前
啃完 TS 工具类型我发现:Pick 和 Omit 原来就是一层窗户纸
前端·面试·typescript
今天AI了吗7 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
重生之后端学习8 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
lilian2338 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos