【Java】【数据库】B树

B-树的形式

(B-树就是B树, 而且'-'是一个连接符号,不是减号。)
B树的结构如下
B树的结构
不同于B+树(关于B+树,我的这篇博客里有写:B+树)的一些特点:

  • 数据 Ki 左边的树不会将 Ki 包括在内,即如上图第二层节点的G就不在它左边指针指向的节点[D,E,F]中。
  • 搜索有可能在非叶子节点结束,最好的情况下O(1)就能找到数据。
  • 它的所有叶节点均为空,而B+树的叶节点却是一些<>组成的。
  • B+树的叶节点有链指针,而B树没有。
  • B树的索引值和具体data都在每一个节点里面,如下图:
    B树的索引值和具体data都在每一个节点里面

为什么用B树?红黑树,AVL树不快吗?

这些树在一般情况下查询性能非常好,但是数据量非常大的时候,内存不够用,大部分数据只能存放在磁盘上,而访问内存和外存的时间差了5个数量级,磁盘读取时间远超数据在内存中的比较时间,使得程序大部分时间会被阻塞在磁盘IO上。
这时候就迫切需要一种数据结构,它可以减少IO次数,B-树就这样被设计出来。

B+树比B树好在哪里?

  • B+树的叶节点有链指针,可以很好的利用空间局部性原理
    访访
  • B+树更适合外部存储。因为内节点没有data域,只有key的副本,所以每个节点能够索引的范围更大更精确,因为磁盘的IO数据大小是固定的,所以B+树单次能IO更多的信息量,相对B树来说更能减少IO次数。
posted @   弦合二挂  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示