为啥使用B+树而不是B树

InnoDB和Myisam为什么使用B+树而不是B树。

这个问题最好还是要搞懂一点。因为我这里很有可能会问到这方面的。我也很想和别人扯索引,然后就会扯到这个。加油。

 

B树

特点: 1、m叉搜索,降低高度

2、所有的节点都存储数据。

3、中序遍历可以得到一个排序好的索引。

为什么可以建索引: 就是可以降低高度,然后减少磁盘IO的操作。

 

 

为啥使用B+树而不是B树

B+树

特点:就是在B树上做了一些修改。

1、数据都在叶子节点上。

2、叶子节点上的数据使用链表连接起来。

 

为啥使用B+树而不是B树

B树和B+树区别?

  1. 关键字的数量不同;B+树中分支结点有m个关键字,其叶子结点也有m个,其关键字只是起到了一个索引的作用,但是B树虽然也有m个子结点,但是其只拥有m-1个关键字。
  2. 存储的位置不同;B+树中的数据都存储在叶子结点上,也就是其所有叶子结点的数据组合起来就是完整的数据,但是B树的数据存储在每一个结点中,并不仅仅存储在叶子结点上。
  3. 分支结点的构造不同;B+树的分支结点仅仅存储着关键字信息和儿子的指针(这里的指针指的是磁盘块的偏移量),也就是说内部结点仅仅包含着索引信息。
  4. 查询不同;B树在找到具体的数值以后,则结束,而B+树则需要通过索引找到叶子结点中的数据才结束,也就是说B+树的搜索过程中走了一条从根结点到叶子结点的路径。