为什么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?》

你可能感兴趣的:(数据库应用)