1. B-树
在介绍索引实现之前,我们先来了解下几种树的数据结构。
二叉搜索树
二叉搜索树有以下性质
1.每个节点有一个关键字
2.左右孩子至多有一个。
3.关键字大于左孩子,小于右孩子。
正因为二叉搜索树的特性,所以这种数据结构很适合用来做搜索,效率等同于二分查找,时间复杂度为log2(n),
但是这种最原始的二叉树有一个弊端,在极端的情况下会退化成链表
所以基础二叉搜索树有很多变种,例如红黑树和AVL树,基于特定的策略避免了树退化成链表,红黑树做数据量不大的搜索还是应用很广泛的,但是要基于文件索引系统。却不合适,因为红黑树虽然搜索效率高,但是树的高度比B-树和B+树要高,需要进行的磁盘IO就多,相比之下后者优势就比较明显了。
2.B-树
一种多路搜索树,不是二叉树
我们来看一个m阶B树
它有如下几个性质
1.根节点至少有2个孩子,根节点孩子数为[2,m]。
2.除根节点外每个非叶子节点的孩子数为[m/2,m](向上取整)。
3.非叶子节点的关键字个数=指向孩子的指针树-1。
4.所有叶子节点在同一层且关键字个数为k-1, 其中 m/2 <= k <= m
5.节点之间关键字的大小,类比二叉搜索树,即关键字的值按大小排列,pi的关键字的值属于(k[i],k[i+1])开区间,例如 p2的关键字要大于17,小于35。
图片来自网络