B+树的理解以及在mysql中的应用

AVL 树和红黑树这些二叉树结构的数据结构可以达到最高的查询效率这是毋庸置疑的。

既然如此,那么数据库索引为什么不用 AVL 树或者红黑树呢?

这就牵扯到一个问题了,不考虑每种数据结构的前提条件而选择数据结构都是在耍流氓。

AVL 数和红黑树基本都是存储在内存中才会使用的数据结构,那磁盘中会有什么不同呢?

这就要牵扯到索引的存储原理了

页是 InnoDB存储引擎管理数据库的最小磁盘单位。

一个页中包括很多数据行。

那么,现在问题就来了

一个父节点只有 2 个子节点,并不能填满一个页上的所有内容啊?那多余的内容岂不是要浪费了?我们怎么才能把浪费的这部分内容利用起来呢?哈哈,答案就是 B+ 树,让一个父节点有多个子节点就可以了。

由于 B+ 树分支比二叉树更多,所以相同数量的内容,B+ 树的深度更浅,深度代表什么?代表**磁盘 io 次数**啊!

所以,涉及到磁盘上查询的数据结构,一般都用 B+ 树啦。

B+Tree的性质:

M阶的B+Tree:叉树

(1)每个节点最多有m个子节点
(2)除根节点外,每个节点至少有m/2个子节点,注意如果结果除不尽,就向上取整,比如5/2=3。 3/2=ceil(1.5)=2
(3)根节点要么是空,要么是独根,否则至少有2个子节点
(4

你可能感兴趣的:(数据结构与算法,mysql,数据结构,b+树)