首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
《为什么 MySQL 三层 B+ 树能存两千万条数据?》
📅 2026/10/26 18:14:31
✍️ 爱科研究院
👁 阅读 3,247
为什么 MySQL 一张表几千万行按主键查一条数据只要几毫秒答案就在 MySQL 的索引结构里——B 树。B 树长什么样这是一张 B 树的示意图它是一个扇出为 3 的简化版本。与二叉树不同B 树可以有非常多的分支。树里包含三种节点根节点、非叶子节点和叶子节点。**只有叶子节点存储数据**根节点和非叶子节点都是索引层查询时从根节点开始一步步向下索引到叶子节点。叶子节点之间用指针串成链表——这让范围查询非常高效找到起点后顺着链表一路扫过去就行。严格说上面说的是聚簇索引二级索引的叶子节点存的是主键值这个留到下一篇写。图里是扇出 3 的简化示意真实 InnoDB 的扇出约 1170看下一段。为什么三层能存千万数据因为一个节点不是一条数据而是一个 16KB 的磁盘页。一个索引项 主键 8 字节 指针 6 字节 ≈ 14 字节一页能放下 16KB ÷ 14B ≈ 1170 个索引项。三层结构就是- 根页 1170 个指针 → 1170 个中间页- 每个中间页再分 1170 个指针 → 1170 × 1170 ≈ 137 万个叶子页- 假设一行数据约 1KB一个叶子页能存 16 行137 万 × 16 ≈ **2190 万行**所以三层 B 树能撑起千万级数据。行更大就长到四层量级一样。为什么比 B 树适合磁盘磁盘 IO 次数 树高一次 IO 读一页。B 树非叶子节点只存键和指针、不存数据同样 16KB 一页能装更多索引项——同样数据量下树更矮、IO 更少。而且数据全在叶子、叶子用链表串起来范围查询顺着链表一路扫就行B 树的数据散布在所有节点里范围扫描要反复上下树IO 多得多。所以不是 B 树不能范围查而是查起来慢——B 树在磁盘场景全面占优。总结回到开头的问题按主键查一条数据最多三次磁盘 IO根页 → 中间页 → 叶子页三次 IO 就是毫秒级。实际中根页常驻内存通常只要 1-2 次 IO。面试口径一句话**B 树高度低、叶子链表串联支持范围查询三层能存千万行**。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/26 18:14:31
当AI手机普及之后,我们的生活会变成什么样
2026/10/26 18:14:31
天津滨海产线实测:C#对接YOLO26焊点检测,误判率压到0.1%以下的工程实践
2026/10/26 18:14:31
矩阵键盘逻辑讲解
2026/10/26 19:24:44
Redis LRU算法解析与实战优化指南
2026/10/26 19:24:44
从技能清单到团队产出:技能体系拆解、评估与组合落地指南
2026/10/26 19:24:44
ADHD自我声明工具设计:轻量声明与场景化任务拆解实践
2026/10/26 19:24:44
i-have-adhd:注意力涣散型用户的轻量级自我管理系统
2026/10/26 19:24:44
技能学习与管理系统指南:从拆解到验证的完整方法论
2026/10/26 19:19:43
AI Agent工程落地的七道深坑与硬核解法
2026/10/26 0:01:33
热搜量不是文档频率:先把 BM25 的统计口径分开
2026/10/26 0:01:33
Nested Learning:解决AI灾难性遗忘的分层记忆架构
2026/10/26 0:01:33
企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战
2026/10/26 11:29:50
全国计算机二级C语言真题PDF高效刷题指南
2026/10/26 0:03:29
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/26 11:29:49
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/25 22:15:16
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/26 11:29:48
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/25 12:42:56
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)