B+树

关于B-Tree的一些知识点:

1:叶节点具有相同的深度,左子树跟右子树的深度一致
2:叶节点的指针为空
3:节点中的数据key从左到右递增排列
在这里需要说明下的是,BTree的结构里每个节点包含了索引值和表记录(数据值)的信息,
我们可以按照Map集合这样理解:key=索引,value=表记录,
优点:
BTree的结构可以弥补红黑树的缺点,解决数据量过大时整棵树的深度过长的问题。
相同数量的数据只需要更少的层,相同深度的树可以存储更多的数据,查找的效率自然会更高。
缺点:
在查询单条数据是非常快的。
但如果范围查的话,BTree结构每次都要从根节点查询一遍,效率会有所降低,
因此在实际应用中采用的是另一种BTree的变种B+Tree(B+树)。
因为btree树的叶子节点不是连续的。就像链表那样。
另外,由于插入删除新的数据记录会破坏B-Tree的性质,因此在插入删除时,需要对树进行一个分裂、合并、转移等操作(反正就是和平衡二叉树和红黑树一样各种旋转)以保持B-Tree性质。
B+Tree存储结构
只有叶子节点存储数据
新的B+树结构没有在所有的节点里存储记录数据,而是只在最下层的叶子节点存储数据,
上层的所有非叶子节点只存放索引信息,这样的结构可以让单个节点存放下更多索引值,增大度Degree的值,提高命中目标记录的几率。
这种结构会在上层非叶子节点存储一部分冗余数据,但是这样的缺点都是可以容忍的,因为冗余的都是索引数据,不会对内存造成大的负担。
优化的作用:
A.B+树每个节点可以包含更多的节点,这样做有两个原因,一个是降低树的高度。另外一个是将数据范围变为多个区间,区间越多,数据检索越快。
B.非叶子节点存储key,叶子节点存储key和数据。
C.叶子节点两两指针相互链接(符合磁盘的预读特性),顺序查询性能更高。

其他的数据结构:

A.二叉树:在大部分情况下,我们设计索引时都会在表中提供一个自增整形字段作为建立索引的列,在这种场景下使用二叉树的结构会导致我们的索引总是添加到右侧,在查找记录时跟没加索引的情况是一样的。
这种情况会导致将导致二叉排序树的效率大大降低。
B.红黑树:在数据量大的时候,深度也很大。
每个父节点只能存在两个子节点,如果我们有很多数据,那么树的深度依然会很大,可能就会超过十几二十层以上,对我们的磁盘寻址不利,依然会花费很多时间查找。
C.hash:无法解决范围查询查询的场景,比如 select count(id) from sus_user where id >10;
因此Hash这种索引结构只能针对字段名=目标值的场景使用。
不适合模糊查询(like)的场景。
D.B-Tree:在查询单条数据是非常快的。
但如果范围查的话,BTree结构每次都要从根节点查询一遍,效率会有所降低,
因此在实际应用中采用的是另一种BTree的变种B+Tree(B+树)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值