【Java】【数据库】B树
B-树的形式
(B-树就是B树, 而且'-'是一个连接符号,不是减号。)
B树的结构如下
不同于B+树(关于B+树,我的这篇博客里有写:B+树)的一些特点:
- 数据 左边的树不会将 包括在内,即如上图第二层节点的G就不在它左边指针指向的节点中。
- 搜索有可能在非叶子节点结束,最好的情况下O(1)就能找到数据。
- 它的所有叶节点均为空,而B+树的叶节点却是一些组成的。
- B+树的叶节点有链指针,而B树没有。
- B树的索引值和具体data都在每一个节点里面,如下图:
为什么用B树?红黑树,AVL树不快吗?
这些树在一般情况下查询性能非常好,但是数据量非常大的时候,内存不够用,大部分数据只能存放在磁盘上,而访问内存和外存的时间差了5个数量级,磁盘读取时间远超数据在内存中的比较时间,使得程序大部分时间会被阻塞在磁盘IO上。
这时候就迫切需要一种数据结构,它可以减少IO次数,B-树就这样被设计出来。
B+树比B树好在哪里?
- B+树的叶节点有链指针,可以很好的利用空间局部性原理
() - B+树更适合外部存储。因为内节点没有data域,只有key的副本,所以每个节点能够索引的范围更大更精确,因为磁盘的IO数据大小是固定的,所以B+树单次能IO更多的信息量,相对B树来说更能减少IO次数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?