B树是一颗多路平衡查找树。每一个节点最多有m-1个关键字(能够存有的键值对)。根节点最少能够只有1个关键字,非根节点至少有m/2个关键字。每一个节点中的关键字都按照从小到大的顺序排列,每一个关键字的左子树中的全部关键字都小于它,而右子树中的全部关键字都大于它。全部叶子节点都位于同一层,或者说根节点到每一个叶子节点的长度都相同。每一个节点都存有索引和数据,也就是对应的key和value。数据库
B+树有两种类型的节点:内部结点(也称索引结点)和叶子结点。内部节点就是非叶子节点,内部节点不存储数据,只存储索引,数据都存储在叶子节点。内部结点中的key都按照从小到大的顺序排列,对于内部结点中的一个key,左树中的全部key都小于它,右子树中的key都大于等于它。叶子结点中的记录也按照key的大小排列。每一个叶子结点都存有相邻叶子结点的指针,叶子结点自己依关键字的大小自小而大顺序连接。父节点存有右孩子的第一个元素的索引。
B+树相对于B树的优点:
1.单一节点存储的元素更多,使得查询的IO次数更少,因此也就使得它更适合作为数据库MySQL的底层数据结构了。
2.全部的查询都要查找到叶子节点,查询性能是稳定的,而B树,每一个节点均可以查找到数据,因此不稳定。
3.全部的叶子节点造成了一个有序链表,更加便于查找。数据结构