B树和B+树的区别?为什么MySQL 使用B+树?

B树和B+树的区别?为什么MySQL 使用B+树?
B树的特点:

  1. 节点排序,叶子节点存储了数据
  2. 叶节点具有相同的深度、叶子节点的指针为空
  3. 一个节点可以存储多个元素,并且多个元素都按照从左到右递增 排序,所有索引元素不重复
    B+树的特点:
  4. 非叶子节点不存储数据、只存储索引,可以放更多的索引
  5. 在所有的叶子节点中增加了下一个叶子节点的指针
  6. 非叶子节点上的元素在叶子节点上都冗余了,也就是叶子结点存储了所有的元素并且都排好了序。

Mysql使用的B+树,因为索引是用来加快查询速度的,B+树通过对数据进行排序,所以提高了查询速度,然后通过一个节点中可以存储多个元素,从而让B+树的高度不会太高,在Mysql中一个Innodb页就是一个B+树的节点,一个Innodb页默认16KB,一般情况下一颗2层的B+树可以存储2000万行的数据,利用B+树叶子节点存储了所有数据并且进行了排序,并且叶子节点之间有指针,可以更好的支持全表扫码,范围查找等SQL语句。

二叉树作为索引的数据结构;左子树的键值小于根的键值,右子树的键值大于根的键值。如果遇到连续自增的索引列,会造成链表结构,多次I/O操作 效率低下
平衡二叉树(红黑树):当树失去平衡的时候,可以通过旋转使其恢复平衡,如果索引列太多 会让树的高度更高,树的高度就代表了至少需要进行多少次磁盘I/O操作。
BTree:叶子节点具有相同的深度、叶子节点的指针为空。所有索引元素不重复,节点中的数据从左到右依次递增排列。
B+Tree:非叶子节点不存储数据,只存储索引,叶子节点(默认16KB)包含所有索引字段,以及数据项,叶子节点之间用指针连接,提高访问性能
Hash表:对索引的key进行一次hash计算,定位出存储数据的位置,会出现hash冲突 ,仅仅支持’=‘、’IN‘操作,不支持范围查找。时间复杂度O(1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值