为啥使用B+树而不是B树
InnoDB和Myisam为什么使用B+树而不是B树。
这个问题最好还是要搞懂一点。因为我这里很有可能会问到这方面的。我也很想和别人扯索引,然后就会扯到这个。加油。
B树
特点: 1、m叉搜索,降低高度
2、所有的节点都存储数据。
3、中序遍历可以得到一个排序好的索引。
为什么可以建索引: 就是可以降低高度,然后减少磁盘IO的操作。
B+树
特点:就是在B树上做了一些修改。
1、数据都在叶子节点上。
2、叶子节点上的数据使用链表连接起来。
B树和B+树区别?
- 关键字的数量不同;B+树中分支结点有m个关键字,其叶子结点也有m个,其关键字只是起到了一个索引的作用,但是B树虽然也有m个子结点,但是其只拥有m-1个关键字。
- 存储的位置不同;B+树中的数据都存储在叶子结点上,也就是其所有叶子结点的数据组合起来就是完整的数据,但是B树的数据存储在每一个结点中,并不仅仅存储在叶子结点上。
- 分支结点的构造不同;B+树的分支结点仅仅存储着关键字信息和儿子的指针(这里的指针指的是磁盘块的偏移量),也就是说内部结点仅仅包含着索引信息。
- 查询不同;B树在找到具体的数值以后,则结束,而B+树则需要通过索引找到叶子结点中的数据才结束,也就是说B+树的搜索过程中走了一条从根结点到叶子结点的路径。