B、B+树
B树:
(1)排序方式:所有节点关键字是按递增次序排列,并遵循左小右大原则;
(2)子节点数:非叶节点的子节点数>1,且<=M ,且M>=2,空树除外(注:M阶代表一个树节点最多有多少个查找路径,M=M路,当M=2则是2叉树,M=3则是3叉);
(3)关键字数:枝节点的关键字数量大于等于ceil(m/2)-1个且小于等于M-1个(注:ceil()是个朝正无穷方向取整的函数 如ceil(1.1)结果为2);
(4)所有叶子节点均在同一层、叶子节点除了包含了关键字和关键字记录的指针外也有指向其子节点的指针只不过其指针地址都为null

B+树:
(1)B+跟B树不同B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每个非叶子节点所能保存的关键字大大增加;
(2)B+树叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到。所以每次数据查询的次数都一样;
(3)B+树叶子节点的关键字从小到大有序排列,左边结尾数据都会保存右边节点开始数据的指针。
(4)非叶子节点的子节点数=关键字数(根据各种资料 这里有两种算法的实现方式,另一种为非叶节点的关键字数=子节点数-1,虽然他们数据排列结构不一样,但其原理还是一样的Mysql 的B+树是用第一种方式实现);

tips:
MySQL的innodb为何不采用B树或红黑树建立索引:
B-树/B+树 的特点就是每层节点数目非常多,层数很少,目的就是为了就少磁盘IO次数,但是B-树的每个节点都会存储数据,这无疑增大了节点大小,而B+树除了叶子节点其它节点并不存储数据,节点小(同样的空间可以存储更多的索引节点),磁盘IO次数就少。
B+树所有的数据存储在叶子节点,并且将所有的叶子节点用指针串起来。这样遍历叶子节点就能获得全部数据,也能进行区间访问。在数据库中基于范围的查询是非常频繁的,而B树不支持这样的遍历操作。
B树是多路树,红黑树是二叉树!红黑树一个节点只能存出一个值,B树一个节点可以存储多个值,红黑树的深度会更大,定位时 红黑树的查找次数会大一些,不适应于大规模数据存储.

浙公网安备 33010602011771号