B+ 树原理详解:从查找、分裂到合并,手写一棵能跑的树
数据库按主键查一行,为什么通常只读 3 个页?为什么主键建议短一点?为什么范围查询快,而 LIKE '%关键词' 快不起来? 这些问题的答案,都在 B+ 树的形状里。 本文不背结论,直接从一棵小树开始:先定规则,再走一遍查找、插入、删除、范围查询,最后写出完整实现。全文用 order=4(每个节点最多 4 个孩子、3 个 key),小到能在纸上画完;核心规则和真实数据库一致,真实实现另外还多了并发、锁、页头等工程细节。 ...
数据库按主键查一行,为什么通常只读 3 个页?为什么主键建议短一点?为什么范围查询快,而 LIKE '%关键词' 快不起来? 这些问题的答案,都在 B+ 树的形状里。 本文不背结论,直接从一棵小树开始:先定规则,再走一遍查找、插入、删除、范围查询,最后写出完整实现。全文用 order=4(每个节点最多 4 个孩子、3 个 key),小到能在纸上画完;核心规则和真实数据库一致,真实实现另外还多了并发、锁、页头等工程细节。 ...
一个 8000 万行的 orders 表,下面这条 SQL 跑了 4.2 秒: SELECT * FROM orders WHERE user_id = 12345 AND created_at >= '2026-09-01'; 加上一个联合索引之后,同样的数据、同样的服务器,它变成了 3 毫秒——快了 1400 倍。 ALTER TABLE orders ADD INDEX idx_user_created (user_id, created_at); 差别在哪里?不是"索引会变魔术"。差别在于:前者把 8000 万行从磁盘上一个页一个页地翻了一遍,后者只沿着一棵矮树下降了三次、读了三四页就找到了全部结果。 ...