【Java】【数据库】B树
B-树的形式
(B-树就是B树, 而且'-'是一个连接符号,不是减号。)
B树的结构如下

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

为什么用B树?红黑树,AVL树不快吗?
这些树在一般情况下查询性能非常好,但是数据量非常大的时候,内存不够用,大部分数据只能存放在磁盘上,而访问内存和外存的时间差了5个数量级,磁盘读取时间远超数据在内存中的比较时间,使得程序大部分时间会被阻塞在磁盘IO上。
这时候就迫切需要一种数据结构,它可以减少IO次数,B-树就这样被设计出来。
B+树比B树好在哪里?
- B+树的叶节点有链指针,可以很好的利用空间局部性原理
(\(空间局部性原理:如果一个存储器某个位置被访问,那么它附近的位置也将会被访问\)) - B+树更适合外部存储。因为内节点没有data域,只有key的副本,所以每个节点能够索引的范围更大更精确,因为磁盘的IO数据大小是固定的,所以B+树单次能IO更多的信息量,相对B树来说更能减少IO次数。
【Java】【数据库】B树的更多相关文章
- Java 数据库树形查询生成菜单结构
Java 数据库树形查询 JAVA从数据库读取菜单,递归生成菜单树. 定义菜单类 public class Menu { // 菜单id private String id; // 菜单名称 priv ...
- JDBC与JAVA数据库编程
一.JDBC的概念 1. JDBC (Java DataBase Connectivity) Java数据库连接 a) 主要提供java数据库应用程序的API支持 2. JDBC的主要功能 a) 创建 ...
- JAVA数据库基本操作 (转)
JAVA数据库基本操作指南 Java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接. 一.取得数据库连接 1.用DriverManager取数据库连接 ...
- java面向对象下:Java数据库编程
19.Java数据库编程: JDBC概述: JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...
- Java数据库设计14个技巧
Java数据库设计14个技巧 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对 ...
- MinerDB.java 数据库工具类
MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...
- MinerBean.java 数据库表 miner bean
MinerBean.java 数据库表 miner bean package com.iteye.injavawetrust.miner; import java.util.Date; /** * 数 ...
- Java数据库学习之模糊查询(like )
Java数据库学习之模糊查询(like ): 第一种方式:直接在SQL语句中进行拼接,此时需要注意的是parm在SQL语句中需要用单引号拼接起来,注意前后单引号之间不能空格 String sql = ...
- Java数据库操作(MySQL与SQLserver)
在java编程开发中,数据库的开发是重头戏. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品: SQL Server是由Microsoft开发 ...
- Java 数据库操作
目录 Java数据库组织架构 下载驱动包 连接数据库 连接数据库的三个步骤 连接数据库的高开销 Statement接口介绍 PreparedStatement类 使用PreparedStatement ...
随机推荐
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(24)-Fiddler如何优雅地在正式和测试环境之间来回切换-中篇
1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考. 2.实际工作场景 2.1问题场景 (1)已发布 ...
- css自定义会话框
效果图图下: HTML代码: <div style="background-color: transparent; border: 1px #DDDDDD solid; width: ...
- WhereIf 扩展
public static class QueryableExtensions { public static IQueryable<T> WhereIf<T>(this IQ ...
- Azure Kubernetes(AKS)部署及查看应用资源
简介 上一篇文章讲解了如何使用Azure DevOps持续部署应用到Azure Kubernetes上.但是部署是否成功?会不会遇到什么问题?项目运行中是否会出现问题?我们该怎么样查看这些问题,并且对 ...
- 微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍
微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍 上一篇关于网关的文章: 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Ngi ...
- HTML元素大全(1)
01.基础元素 <h1/2/3/4/5/6>标题 从大h1到小h6,块元素,有6级标题.是一种标题类语义标签,内置了字体.边距样式. 合理使用h标签,主要用于标题,不要为了加粗效果而随意使 ...
- SQL--Row_Number() over()的使用
1.语法 --over里面有两个参数 --partition by 用于分割区域 此参数可选 --order by 用于排序 此参数必有 row_number() over(partition by ...
- Linux三剑客awk
Linux三剑客awk awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel表的样式 awk早期在Unix上实现,我们用的awk是gawk,是GUN ...
- rocky8删除/etc/fstab 和/boot/所有文件,通过光盘救援模式恢复
rocky8删除/etc/fstab 和/boot/所有文件,通过光盘救援模式恢复 mkdir /rootdir 先通过df和lsblk确定那个分区是根,如果确定不了,就先挂载一个分区,查看里边的文件 ...
- mybatis-自定义映射resultMap
自定义映射resultMap resultMap处理字段和属性的映射关系 resultMap:设置自定义映射 属性: id:表示自定义映射的唯一标识,不能重复 type:查询的数据要映射的实体类的类型 ...