索引的物理存储
与B-Tree相比,B+Tree有以下不同点:
非叶子结点的子树指针与关键字个数相同;
非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);
为所有叶子结点增加一个链指针;
所有关键字都在叶子结点出现;
内节点不存储data,只存储key 如:(M=3)
为什么B+Tree更适合做文件索引
因为B+ Tree的内部节点并没有指向关键字具体信息的指针,所以他的内部节点比其他结构的更小,同样大小的盘块能够容纳更多的单位索引结构,一次性读入内存的关键字信息索引就更多,相对来说IO读写次数也就少很多。
为什么不用AVL数或者红黑树做索引
这个问题回答之前,我们往往评价程序、数据结构、算法的优良好坏由时间和空间决定
空间:
红黑树是二叉树的进化和演变而来的,是一种平衡二叉查找树:(红黑树)
抛开红黑树的其他性质,红黑树每一个父节点都有一个或者两个子节点,那么我们知道,计算机存储结构的最小单元是页,那么就是我无论是否会占满整个页系统都会给分配一个最小存储单元:页(InnoDB一页大小固定默认是16k),那么这就很容易造成了空间上的大量浪费:因为很可能两个子节点根本就无法占满一页!这就造成了空间上的浪费!
时间:
二叉树,红黑树的最大的特点就是同样大小的盘块不能够容纳更多的单位索引结构(数据在内节点存放),一次性读入内存的关键字信息索引就更少一些,这就从根本上决定了红黑树I/O到内存上的次数>B树。一般的红黑树的高度h会大于b+树,而且红黑树上逻辑上相邻的记录在磁盘上也并不是一定物理相邻的。从而造成了时间上的浪费!这样一个空间和时间都不尽如人意的数据结构为何还要使用呢!
来源:oschina
链接:https://my.oschina.net/u/4167465/blog/3176085