B树和B+树 发布于 2025 年 10 月 8 日 全文约 336 字 · 预计阅读 2 分钟 #### B-树  ``` 数据存放在叶子和非叶子节点 特点: 1.所有键值分布在整颗树中(索引值和具体data都在每个节点里); 2.任何一个关键字出现且只出现在一个结点中; 3.搜索有可能在非叶子结点结束(最好情况O(1)就能找到数据); 4.在关键字全集内做一次查找,性能逼近二分查找; ``` #### B+树(相邻的叶子节点有指针关联)  ``` 数据存放在叶子节点中,这样每次加载到内存的,B+树更适合外部存储。由于内节点无 data 域,每个节点能索引的范围更大更精确 这个很好理解,由于B-树节点内部每个 key 都带着 data 域,而B+树节点只存储 key 的副本,真实的 key 和 data 域都在叶子节点存储。 前面说过磁盘是分 block 的,一次磁盘 IO 会读取若干个 block,具体和操作系统有关,那么由于磁盘 IO 数据大小是固定的,在一次 IO 中,单个元素越小,量就越大。 这就意味着B+树单次磁盘 IO 的信息量大于B-树,从这点来看B+树相对B-树磁盘 IO 次数少。 ``` B树和B+树 https://blog.gamehomexx.asia/index.php/archives/51/ 无责任编辑 joewang 发布时间 2025 年 10 月 8 日 最后编辑时间 2025 年 10 月 8 日 版权协议 CC BY-NC-SA 4.0 Mysql 广告 广告位招租 联系站长投放广告 了解更多 → 分享 文章目录 × B树和B+树 ← 上一篇旅行小记 下一篇 →MySQL和MongoDB的性能测试 发表评论 取消回复 提交评论 评论 暂无评论
#### B-树  ``` 数据存放在叶子和非叶子节点 特点: 1.所有键值分布在整颗树中(索引值和具体data都在每个节点里); 2.任何一个关键字出现且只出现在一个结点中; 3.搜索有可能在非叶子结点结束(最好情况O(1)就能找到数据); 4.在关键字全集内做一次查找,性能逼近二分查找; ``` #### B+树(相邻的叶子节点有指针关联)  ``` 数据存放在叶子节点中,这样每次加载到内存的,B+树更适合外部存储。由于内节点无 data 域,每个节点能索引的范围更大更精确 这个很好理解,由于B-树节点内部每个 key 都带着 data 域,而B+树节点只存储 key 的副本,真实的 key 和 data 域都在叶子节点存储。 前面说过磁盘是分 block 的,一次磁盘 IO 会读取若干个 block,具体和操作系统有关,那么由于磁盘 IO 数据大小是固定的,在一次 IO 中,单个元素越小,量就越大。 这就意味着B+树单次磁盘 IO 的信息量大于B-树,从这点来看B+树相对B-树磁盘 IO 次数少。 ```
评论 暂无评论