首页 > 数据库 >MySQL为什么使用B+树

MySQL为什么使用B+树

时间:2024-03-15 15:30:31浏览次数:29  
标签:为什么 存储 MySQL Tree 数组 使用 磁盘 数据 节点

在线查看数据格式链接:Data Structure Visualization icon-default.png?t=N7T8https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

 常见数据结构:

        1.数组:数组是内存中一块连续的内存空间,定义一个数组对象,就需要先指定数组的大小,当存储数据的大小大于定义的数组大小,就需要对数组进行扩容(定义一个更大的数据),并将原本数组的数据复制到新数组中,这样性能消耗会比较大。

        2.链表:链表是一种线性数据结构,它由一系列节点组成,这些节点在物理上可以是连续的也可以是不连续的,它们通过指针连接在一起。当需要查找数据的时候会从头部开始遍历,时间复杂度为O(n)。

        3.二叉查找树:二叉查找树左子树上节点值小于根节点的值,右子树上节点值大于根节点的值。当需要快速查找时,将数据存储在BST是一种常见的选择,因为此时查询时间取决于树高,平均时间复杂度是O(lgn)。然而,BST可能长歪而变得不平衡,如下图所示,此时二叉树退化为链表,时间复杂度退化为O(n)。

        4.红黑树:红黑树虽然实现了平衡节点,但是每个节点只能存储一个元素的结构还是会导致树高度很高,不如B树和B+树的索引文件页的方式存储。

        5.B树:B树是为磁盘等辅存设备设计的多路平衡查找树,与二叉树相比,B树的每个非叶节点可以有多个子树。因此,当总节点数量相同时,B树的高度远远小于AVL树和红黑树(B树是一颗“矮胖子”),磁盘IO次数大大减少。

        6.B+树:

                (1)B树的每个节点都会存储data数据,而B+Tree的话非叶子节点是存储的索引(冗余),不存储data数据,这样每一页文件页能存储的节点就很多,树的高度就可以得到很好的控制,树的高度越高,从磁盘load节点到内存对比的次数就会越多,磁盘I/O是费时。

                (2)所以B+Tree在树高度相同的情况下能够存储更多的索引数据,间接的减少了磁盘的I/O操作,B+Tree的I/O次数会更加稳定一些。

               (3)从范围查询的角度上来说B+Tree也具备绝对的优势,因为B+Tree在每个相邻的叶子节点之间都有互相指向

                (4)B+Tree在全表扫描的情况下也是比较占优势的,因为B+Tree的数据都是存储在非叶子节点的,所以只需要扫描叶子节点就可以拿到全部数据了,B Tree的话就需要从头遍历整颗树。

        

标签:为什么,存储,MySQL,Tree,数组,使用,磁盘,数据,节点
From: https://blog.csdn.net/ChenJun___/article/details/136739747

相关文章

  • 使用 Ant Design(Antd)创建精美的界面
    使用AntDesign(Antd)创建精美的界面AntDesign(简称Antd)是一个流行的ReactUI组件库,提供了丰富多样的组件,使得开发人员能够快速构建漂亮的用户界面。在本篇博客中,我们将介绍Antd的基本使用方法,并展示一些常用组件的示例。按钮Antd提供了多种按钮样式,用于满足不同的......
  • 使用 React Router 的 withRouter
    使用ReactRouter的withRouterReactRouter是React应用中常用的路由管理工具,它可以帮助我们管理页面之间的导航和状态。而withRouter则是ReactRouter提供的一个高阶组件,用于将路由相关的属性注入到组件中,使得我们可以在不同的组件中访问路由信息。1.安装Reac......
  • iis使用动态 IP 限制
     使用动态IP限制(下载页面提示已停用)https://www.iis.net/downloads/microsoft/dynamic-ip-restrictionshttps://learn.microsoft.com/en-us/iis/manage/configuring-security/using-dynamic-ip-restrictions特征动态IP限制模块包括以下主要功能:根据并发请求数......
  • MySQL 跨库之间联合查询的方法
    MySQL跨库之间联合查询的方法背景随着业务上云的需要,公司里面有阿里云上面的测试环境.也有公司内的测试环境.但是阿里云上面的机器和公司内的机器存在一些差异.所以一直想有一个归集数据的过程.能够在一张图标里面关联公司内和阿里云上面的一些数据信息实现类似于混......
  • 聊一聊 MySQL 的 InnoDB 存储引擎以及三种日志
    楔子上一篇文章我们介绍了MySQL的基本架构,这里再来回顾一下。整个架构还是很好理解的,我们说MySQL分为Server层和存储引擎层。其中Server层包含了MySQL的大多数核心服务功能,而存储引擎层则负责提供数据的存储和读取,并且是插件式的,一个Server层支持不同的存储引擎层......
  • React — useReducer使用方法
    1.定义一个reducer函数(根据不同的action返回不同的新状态)2.在组件中调用useReducer,并传入reducer函数和状态的初始值3.事件发生时,通过dispatch函数分发一个action对象(通知reducer)要返回哪个新状态并渲染UIimport{useReducer}from"react"//1.定义一个reducer函数,根据不......
  • MySQL默认值NULL、空值、Empty String的区别,哪个更好?
    一套完美的系统,离不开数据库的设计。当我们数据库添加一个新的字段的时候,你会设置默认值为NULL,空值、还是EmptyString呢?首先我们来看下这三种值的介绍空值,空白,即什么都不填,等同于NULL(设计表结构时保存空值会自动变成NULL),当然也可以手动输入默认值。NULL。EmptyString,空字......
  • php多进程引发mysql查询问题
    1、报错:Packetsoutoforder.Expected1received56.Packetsize=3159346开始配置my.cnf的max_allowed_packet=2G可是没什么卵用原因:个人判断是因在laravelmysql的连接是随着php销毁而销毁;所以会保持数据库的连接会话能重复使用所以要配置database.php  配置文件opt......
  • Npm使用教程
    简介npm,全名nodepackagemanger,是node的开放式模块登记和管理系统,是node.js包的标准发布平台。npm如何使用npm在按照Node.js时会连带被安装。但有可能不是最新版本,需要npminstallnpm@latest-g升级到最新版本。基本命令:#查看npm命令列表$npmhelp#查看各个......
  • 为什么Java不支持多继承
    1、典型回答在Java语言中,不支持多继承的主要原因是为了简化语言设计和避免潜在的问题(如菱形继承)以及避免多重继承的层次膨胀,同时又因为在实际工作中,确实很少用到多继承,所以在Java语言中,并不支持多继承。而且,虽然Java中不支持多继承,但也给了一些功能上的替代方案,比如实现多......