美文网首页
B Tree和B+Tree

B Tree和B+Tree

作者: 小吉头 | 来源:发表于2020-04-12 16:41 被阅读0次

1、为什么使用B Tree

常用的查找类数据结构做下对比:

哈希表:定位速度快,时间复杂度为O(1),但是不支持范围查询

二叉树:支持定位和范围查询,但是可能失衡

二叉树失衡

红黑树:虽然做了数据平衡,但是数据量大的时候深度会比较大,磁盘I/O会很频繁,导致查询效率低

B Tree:是为了磁盘存储结构设计的多路平衡树,在同样的数据量下,B Tree的树深度低,磁盘I/O读写次数少,达到性能的提升

2、B Tree为什么能提升查询性能:

下图显示了B Tree中1~26主键索引的数据结构,指针指向磁盘块地址,数据是该主键对应表那一行的数据。使用的是聚簇索引,什么是聚簇索引,可以参考下一篇文章,会介绍索引。

B Tree主键存储示例

下图红黑树中1~15主键的存储结构:

红黑树主键存储示例

假设要查找id=15的数据,B Tree会将根节点磁盘块1常驻内存,发现比9大比18小,根据指针找到磁盘块3,然后将磁盘块3所有数据加载到内存,再从中查找id=15的数据。只用了一次磁盘I/O。

再看红黑树中,将根节点4常驻内存,比较id=15,比4大,将右节点8加载到内存,比较后再加载右节点10到内存...一直找到15为止,一共进行了5次磁盘I/O才找到id=15的数据。红黑树要频繁读取数据结构中存储的节点,为什么不是直接将以8下面的整块右子树加载到内存?因为子节点不像B Tree一样是存储在相同的磁盘块中的,数据是分散到不同盘面的不同扇区上,即使将8下面的整个右子树一次性读取,实际上还是要频繁读取磁盘中的节点才能加载到内存。

3、B+Tree的优势

mysql的MyISAM和InnoDB存储引擎底层使用的是B+Tree,B+Tree是在B Tree基础上优化的。

B+Tree模拟主键索引示例

1、B+Tree的非叶子节点只存储键值信息,只有叶子节点才存储数据,在同样磁盘块大小下可以存储更多键值对,可以降低树的深度,从而减少磁盘I/O

2、叶子节点存储了所有的数据,并且通过指针连接到下一个磁盘块数据,不需要借助父节点,范围查找效率更高

相关文章

  • Mysql索引结构

    一、B+Tree 二、B+Tree分析 mysql使用的是B+Tree,为什么不使用B-Tree呢,主要是树结构决...

  • MySQL索引底层

    1.分析B树 相关概念 B-Tree B+Tree B+Tree与B-Tree区别 Mysql底层结构 InnoD...

  • b+树

    B+Tree是在B-Tree基础上的一种优化,B-Tree中每个节点同时保存key和data,而B+Tree非叶子...

  • BTree和B+Tree详解

    BTree和B+Tree详解

  • b+tree数据结构、limit、order by、 group

    b+tree数据结构、limit、order by、 group by、where 分析思路: 从b+tree索引...

  • MySQL索引优化案例分析

    MySQL中的索引分类 按算法来分类包括B+Tree、Hash两种,大多数情况下会采用B+Tree。B+Tree与...

  • MySQL索引

    索引结构种类(Index Method) B+tree索引 哈希索引 B+tree 分类 聚集索引(主键索引) 非...

  • B Tree和B+Tree

    1、为什么使用B Tree 常用的查找类数据结构做下对比: 哈希表:定位速度快,时间复杂度为O(1),但是不支持范...

  • B Tree 和 B+Tree

    数据结构学习地址:https://www.cs.usfca.edu/~galles/visualization/A...

  • MYSQL索引结构的思考

    MYSQL的 innodb索引结构是 B+tree B+tree 是有 二叉树-> 平衡二叉树- > B-tree...

网友评论

      本文标题:B Tree和B+Tree

      本文链接:https://www.haomeiwen.com/subject/jwuymhtx.html