为什么 MySQL 索引要用 B+ 树?不是二叉树,也不是哈希?

MySQL

MySQL 的索引为什么使用 B+ 树,而不是二叉树或哈希表?

面试题考点

是否理解数据库存储引擎和磁盘 IO 之间的关系。

面试官想听的

1、B+ 树能减少磁盘 IO

2、B+ 树能支持范围查询,但是哈希不能

3、InnoDB 是页结构,B+ 树能天然适配页存储

面试示例回答

B+ 树是专门为磁盘存储设计的数据结构。

在 MySQL 中,一个节点通常是 16KB,当我们查询时,每次 IO 会把整个节点读入内存。

详情请参考:http://xhslink.com/o/e1Fu4WUJnR

由浅入深分析

1、为什么不是二叉树:太高、IO 次数多、查找慢。

2、为什么不是 B 树:B 树每层都存数据,遍历效率低。

3、为什么不是哈希表:无法排序和范围查询。

4、为什么是 B+ 树:高度低(减少 IO);叶子节点链表适合顺序遍历;与磁盘页结构天然契合。

面试加分点

1、能讲出 B+ 树与页的关系:InnoDB 一页 16KB,一个节点可存多个索引键,IO 更高效。

2、能举出真实的项目例子进行辅助说明:比如,我在 XX 公司实习时曾做过慢 SQL 优化,定位下来发现因为字段未建索引导致全表扫描,用 B+ 树索引后性能从 3 秒降到 0.1 秒。

3、能提及聚簇索引:主键索引是聚簇的,叶子节点直接存整行数据,这也是 B+ 树的优势之一。

#MySQL##春招##大厂##后端开发##算法#
2025八股文复盘 文章被收录于专栏

带你复盘2025大厂八股文面试,拆解面试官到底想听啥

全部评论
学到了 谢谢大佬分享
1 回复 分享
发布于 昨天 19:49 陕西

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务