当前位置: 首页 > article >正文

【数据结构】通过对比二叉查找树、平衡二叉树和B树,对MySQL中的B+树讲解

从二叉查找树到B+树的演进

通过对比二叉查找树平衡二叉树B树B+树,从简单到复杂,逐步帮助理解B+树的特点及优势。


1. 二叉查找树(Binary Search Tree, BST)

二叉查找树是一种简单的树结构,特点是每个节点最多有两个子节点:

  • 左子树:所有节点值小于根节点。
  • 右子树:所有节点值大于根节点。

特点

  • 查询时间复杂度:
    • 平均情况:(O(log n))
    • 最差情况:(O(n))(当树退化为链表时)
  • 数据存储位置:数据存储在每个节点中。

示例图

        10
       /  \    
      5   20    
     / \    \    
    3   7    30    

缺点

  • 树容易变得不平衡,影响查询效率。

2.平衡二叉树(Balanced Binary Tree, AVL Tree)

平衡二叉树在二叉查找树的基础上,通过旋转操作保持树的平衡。

特点

  • 始终保持查询复杂度为
  • O(log n)
  • 数据存储位置:和二叉查找树相同,数据存储在每个节点中。
  • 插入和删除操作时,可能需要通过旋转来维持平衡。

示例图

        10
       /   \       
      5     20       
     / \     / \       
    3   7  19  30       

缺点

  • 对频繁插入/删除操作不友好,调整成本高。

3.B树(B-Tree)

B树是多路平衡树,特点是每个节点可以存储多个键值。
B树的阶数m:每个节点最多包含 m-1 个键值,最多有 m 个子节点。
在这里插入图片描述

特点

  • 树高度较低:相比二叉树,B树每个节点存储多个键值,减少树的高度。
  • 数据存储分布:数据存储在非叶子节点和叶子节点中。
  • 磁盘优化:每个节点通常对应一个磁盘页,减少磁盘I/O。

缺点

  • 数据存储在非叶子节点和叶子节点中,范围查询效率不如B+树。

4.B+树(B+ Tree)

B+树是对B树的进一步优化:

  • 非叶子节点:只存储键值,用于索引。
  • 叶子节点:存储所有数据,并按照大小顺序排列,叶子节点之间用链表连接。

特点

  • 查询效率:时间复杂度为(O(log n))
  • 数据存储分布
  • 非叶子节点:只存储键值,用于索引。
  • 叶子节点:存储所有数据,并按顺序排列。
  • 磁盘优化:节点存储多个键值,充分利用磁盘页预读特性。
  • 适用场景:数据库索引、文件系统等。
    在这里插入图片描述

特性二叉查找树平衡二叉树B树B+树
树的阶数22m > 2m > 2
节点存储1个键值1个键值多个键值多个键值
数据存储位置所有节点所有节点所有节点仅叶子节点
范围查询效率不高不高较高非常高
树的高度较高较高较低最低
适用场景内存中简单查找内存中高效查找数据库、磁盘系统数据库、文件系统优化

每层节点的存储能力

  • 根节点:存储 1000 个键值,可以指向 1001 个子节点。
  • 中间节点:每个节点可以存储 1000 个键值,并指向 1001 个下一层节点。
  • 叶子节点:最终存储实际数据,每个节点可以存储 1000 条记录。

3层 B+树的计算

  1. 第一层(根节点):根节点最多可以指向1000个键值(节点数)。
  2. 第二层(中间层):每个中间节点又可以指向1000个键值,总共有1000×1000=
    1,000,000个键值(节点数)。
  3. 第三层(叶子节点):叶子节点每个可以存储1000条实际数据,总共有1000×1000×
    1000=1,000,000,000条数据。

3层 B+树的存储总量

3层 B+树的存储总量就是叶子节点的总存储量,所以这里的计算结果是 10亿条数据


b+树可视化https://bplustree.app/


http://www.kler.cn/a/410257.html

相关文章:

  • 前后端分离,解决vue+axios跨域和proxyTable不生效等问题
  • candence: 常用的一些命令: Move / Mirror / Rotate / Spain / Fix / unFix / Flipdesign
  • 部署实战(二)--修改jar中的文件并重新打包成jar文件
  • AI赋能电商:构建高效、智能化的新零售生态
  • Otter 安装流程
  • Javascript高级—深入JS模板字符串的高级用法
  • 企业OA管理系统:Spring Boot技术架构与应用
  • Spring Boot英语知识网站:开发与优化
  • AI服务器核心部件产业链升级分析
  • mac终端配置-支持 git branch
  • 数字图像处理(4):FPGA中的定点数、浮点数
  • wsl2的Ubuntu18.04安装ros和anaconda
  • 后端开发详细学习框架与路线
  • 基于python的机器学习(三)—— 关联规则与推荐算法
  • 3D可视化产品定制,打造“所见即所得”的购物体验!
  • FPGA实现串口升级及MultiBoot(九)BPI FLASH相关实例演示
  • sql工具!好用!爱用!
  • Css—实现3D导航栏
  • conda下载与pip下载的区别
  • 丹摩征文活动|实现Llama3.1大模型的本地部署
  • 第三十八章 IOT 通信协议MQTT协议实现的中间件EMQXDocker安装与验证指南
  • 系统使用杂记
  • 一文理解 Python 编程语言中的 .strip() 方法
  • python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改
  • 制造系统中ERP系统与MES管理系统的区别
  • centos为用户赋予sudo权限