面试时被问到为什么要用B+树存储索引

  • 树的常见机构

树无非就是二叉树,二叉搜索树,平衡二叉树、高级一点的有红黑树、B树、B+树....

  • 简单了解红黑树

其实我们在面试时,并不是要知道它的定义或者如何去设计它,而面试官真正想从你那里知道为什么这样设计,它的使用场景有哪些。

其实,红黑树就是从二叉树演变而来。

二叉树:左边的节点比根节点小,右边比根节点大,类似于这种

但是,如果插入的树变成了有序的,二叉树就退化成链表。所以,就引入了红黑树,就是为了保证树的平衡

那为什么一定要保证树的平衡呢?

因为树的查找性能取决于树的高度,让树竟可能平衡,就是为了降低树的高度。

  • B树了解 

B树是一种多路搜索树,它的每个节点可以拥有多余两个孩子节点,M路的B树最多能拥有M个孩子节点

为什么要设计成多路呢?

主要还是为了降低树的高度,路树越多,高度越低,查找的性能越高。

如果不限制路树,这样就退化成了有序的数组了

这就好比文件系统一样,索引是用B树,而不是用红黑树或者有序数组。

文件系统和数据库的索引是存在硬盘上的,如果数据量大的话,不一定能一次加载到内存中。

  • B+树

B+树是在B树的基础上改造,它的数据都在叶子节点,同时,叶子节点之间还加了指针形成链表

这是一个4路B+树,它的数据都在叶子节点,并且有链路相连。

为什么要这样设计呢?

B+树在数据库的索引中用到最多,数据库的select操作,有时会查找多条,B树查询需要做局部的中序遍历,可能要跨层访问,而B+树所有的数据都在叶子节点,不用跨层,同时有链表结构,只需要找到首尾,通过链表就能把所有数据查询出来

比如,找7~9,只需要在叶子节点中就能找到。

  • 总结

如果只选一个数据查询,hash查询效率更快,但是如果查询多条数据,由于B+树索引有序,它的查询效率就比hash快很多了。

而且,数据库的索引一般是存在磁盘上,数据量大的情况下无法一次装入内存,B+树的设计可以允许数据分批

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值