淘宝网站icp备案建设导航网站费用吗
2026/2/9 23:43:25 网站建设 项目流程
淘宝网站icp备案,建设导航网站费用吗,wordpress分类列表显示,企业咨询合同范本通用版#x1f333; B 树 vs B 树#xff1a;为什么 MySQL 用 B 树#xff0c;而不是 B 树#xff1f;B 树不是 B 树的“升级版”#xff0c;而是为“范围查询”而生的专用结构。如果你学过数据结构#xff0c;一定听说过 B 树#xff08;B-Tree#xff09;#xff1b; 如果… B 树 vs B 树为什么 MySQL 用 B 树而不是 B 树B 树不是 B 树的“升级版”而是为“范围查询”而生的专用结构。如果你学过数据结构一定听说过B 树B-Tree如果你用过数据库一定接触过B 树B Tree。但你是否真正理解它们到底有什么区别为什么MySQL、PostgreSQL、Oracle 等主流数据库都选择 B 树做索引文件系统如 NTFS、ReiserFS又为何偏爱 B 树今天我们就从结构、查询、插入、删除、I/O 效率、适用场景六大维度彻底讲透 B 树与 B 树的区别 一、先看结构根本差异在哪✅ B 树所有结点都存数据[50] / \ [30,40] [60,70] / | \ / | \ 10 35 45 55 65 75每个内部结点既存索引也存真实数据叶子结点和其他结点没有本质区别查找任意关键字可能在任意层命中✅ B 树只有叶子存数据内部只存索引[50] / \ [30] [60] / \ / \ [10,30] [40,50] [60,70] ← 所有数据都在这里 ↑ ↑ ↑ └─── 叶子结点通过指针连成链表 ───┘内部结点仅作导航索引不存真实数据所有数据记录或指针只存在于叶子结点叶子结点之间用双向链表连接 这个设计是 B 树一切优势的起点 二、六大核心区别详解维度B 树B 树1. 数据存储位置所有结点都可存数据仅叶子结点存数据2. 叶子结点结构普通结点无特殊连接通过指针连成有序链表3. 查询效率单点查询快可能早停单点查询略慢必须到叶子4. 范围查询需中序遍历效率低链表顺序扫描极高效5. 磁盘 I/O 效率内部结点混存数据扇出小内部结点纯索引扇出更大 → 树更矮6. 插入/删除稳定性结构变化复杂更稳定分裂/合并仅影响局部下面逐条展开✅ 区别 1数据存储位置 → 决定一切B 树每个结点包含(key, data)对→ 插入一条记录可能放在根、中间或叶子B 校内部结点只存key用于导航叶子存(key, data)或(key, pointer)优势B 树的内部结点更“轻”同样磁盘块能存更多关键字 →分支因子更大 → 树高更低举例假设一个磁盘页 4KB每条记录 1KB指针 8 字节。B 树结点最多存约 3 个 (key data)B 树内部结点可存约 500 个 key 指针因无 data→ B 树高度可能只有 2~3 层而 B 树需要 4~5 层 →I/O 次数更少✅ 区别 2叶子链表 → 范围查询的“核武器”这是 B 树最被低估的设计[10] → [20] → [30] → [40] → ... ↑_________________________↓ 双向链表当你执行SELECT * FROM users WHERE id BETWEEN 100 AND 200;B 树一次查找定位到 100 的叶子沿链表顺序读取直到 200→几乎 100% 顺序 I/O缓存友好B 树需要多次树遍历关键字分散在不同结点→大量随机 I/O性能差 实测范围查询下B 树比 B 树快5~10 倍✅ 区别 3单点查询B 树真的更快吗理论上B 树可能在非叶子结点就命中数据少走一层。但现实中数据库通常将B 树的叶子存完整记录聚簇索引或存主键指针二级索引即使多走一层树高本身很低2~3 层差异可忽略而 B 树更大的扇出反而可能让总层数更少✅结论单点查询性能基本持平B 树不输✅ 区别 4插入与删除的稳定性B 树插入可能导致任意层结点分裂数据可能从叶子“上浮”到高层B 树所有数据固定在叶子分裂只发生在叶子或内部索引层数据位置稳定️ 对数据库而言“数据位置稳定”意味着缓存命中率更高更新操作更可预测并发控制更简单 三、真实世界中的选择系统使用结构原因MySQL (InnoDB)B 树高频范围查询如分页、时间范围MongoDBB 树早期现用 WiredTigerB 树变种早期支持嵌套文档需灵活存储PostgreSQLB 树默认索引兼顾点查与范围查Linux ext4 / XFSB 树或其变种如 extent tree文件元数据大小固定点查为主Windows NTFSB 树支持大目录快速遍历规律数据库 → 偏好 B 树范围查询刚需文件系统 → 多用 B 树或变种元数据小点查为主 四、一张图总结核心差异B 树 B 树 ┌─────────────┐ ┌─────────────┐ │ K1, D1 │ │ K2 │ ← 内部结点仅索引 │ K2, D2 │ ├─────────────┤ └──────┬──────┘ │ K1 │ K3 │ ┌────────┴────────┐ ┌─┴─┐ ┌─┴─┐ ┌────▼────┐ ┌────▼────┐ ┌──▼──▼─┐ ┌▼──▼──┐ │K3,D3│K4,D4│ │K5,D5│K6,D6│ │K1,K2│ │K3,K4│ ← 叶子存数据 链表 └─────────┘ └─────────┘ └─────┬─┘ └─┬─────┘ └─────→ 结语没有最好只有最合适B 树通用平衡树适合点查询为主、数据均匀分布的场景如内存索引、文件系统元数据B 树为磁盘 I/O 和范围查询优化是现代数据库的标配正如《数据库系统概念》所说“B 树是为磁盘存储时代量身定制的数据结构。”下次当你写WHERE id 1000 LIMIT 100时记得感谢 B 树背后的那条叶子链表它正默默为你省下数百次磁盘寻道延伸阅读《Database Internals》第 3 章B 树实现细节MySQL InnoDB 聚簇索引 vs 二级索引LSM-TreeB 树的“竞争对手”用于写密集场景❤️ 如果你觉得这篇推文帮你理清了 B 树与 B 树的迷思欢迎点赞、在看、转发 评论区聊聊你们公司用的数据库底层索引是哪种结构

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询