为什么MySql数据库的InnoDB使用B+树

可选存储数据结构:哈希表、B树、B+树。

它们作为单个数据查询都很快。但为什么最终选择B+树呢?我们先看它们的区别:

1、为了保证单数据查询性能,哈希表无序排列。

2、B树在每个节点都可以存储数据,所以每一次查询都需要从根节点开始遍历。

3、B+树只可以在叶子节点存储数据。

对于单个数据查询,哈希表和B树都有性能优势。但是对于关系数据中的批量查询、区间查询、模糊查询以及排序。B+树的性能最优。解释如下:

1、哈希虽然能够提供 O(1) 的单数据行操作性能,但由于其数据无序排列,但是对于范围查询和排序却无法很好地支持,最终导致全表扫描。

2、由于B树所有的节点都可能包含目标数据,我们总是要从根节点向下遍历子树查找满足条件的数据行,这个特点带来了大量的随机 I/O,也是 B 树最大的性能问题。

3、B+ 树中就不存在这个问题了,因为所有的数据行都存储在叶节点中,而这些叶节点可以通过『指针』依次按顺序连接,当我们在如下所示的 B+ 树遍历数据时可以直接在多个子节点之间进行跳转,这样能够节省大量的磁盘 I/O 时间,也不需要在不同层级的节点之间对数据进行拼接和排序;通过一个 B+ 树最左侧的叶子节点,我们可以像链表一样遍历整个树中的全部数据,我们也可以引入双向链表保证倒序遍历时的性能。

 

参考:《为什么 MySQL 使用 B+ 树 · Why's THE Design?》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WalsonTung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值