首页 > 数据库 >mysql为啥不用红黑树

mysql为啥不用红黑树

时间:2024-02-26 11:12:13浏览次数:44  
标签:层级 为啥 红黑树 tree 叶子 IO mysql 节点

Mysql没有使用红黑树的原因主要是因为红黑树的层级较多,可能会导致大量的磁盘IO操作。红黑树是一种自平衡的二叉查找树,它的特点是根节点为黑色,叶子节点为黑色的空节点,红色节点下的子节点一定为黑色节点。从根节点到叶子节点所有的路径上存在相同数目的黑色节点。红黑树的平衡性保证从根节点到叶子节点的最长路径不会超过最短路径的2倍。然而,当数据量较大时,红黑树的层级可能会变得非常多,例如,如果有万级数据,假设存在200层,那么计算机会有200次的IO操作,这在性能上是不利的。

相比之下,B-tree树结构更适合于存储大量数据,因为它能够减少树的层级,从而减少磁盘IO操作。B-tree每个节点包含多个关键字和指针,而关键字记录的指针存储在叶子节点。这样,每个非叶子节点能够存储更多的关键字,树的层级也就下降了,查询数据的速率变快。

Mysql对B-tree进行了改造,提出了B+-tree,它在B-tree的基础上增加了顺序访问的特性,即叶子节点中的关键字是有序的。这样,查询数据时可以通过顺序访问叶子节点来快速找到所需的数据。

综上所述,Mysql没有使用红黑树而是选择了B-tree或B+-tree,主要是因为红黑树的层级较多,可能会导致大量的磁盘IO操作,而B-tree和B+-tree能够更好地处理大量数据,减少磁盘IO操作,提高查询效率。1

标签:层级,为啥,红黑树,tree,叶子,IO,mysql,节点
From: https://www.cnblogs.com/matengfei123/p/18033888

相关文章

  • MySQL——去重复
    MySQL——去重复把查询结果去除重复记录。注意:原表数据不会被修改,只是查询结果去重。使用的关键字为:distinct。语法结构:selectdistinct字段名from表名;distinct不能以这种形式出现:select字段名,distinct字段名from表名;会报错。distinct只能出现在所有字段的最前方......
  • MySQL备份恢复数据--binary-mode is enabled and mysql is run in non-interactive...
    使用mysqldump;MySQL自带的逻辑备份工具。mysqldump[选项]数据库名[表名]>脚本名mysqldump[选项]--数据库名[选项表名]>脚本名mysqldump[选项]--all-databases[选项]>脚本名备份mysqldump-hlocalhost-uwordpress-pwordpress_20200104>c......
  • mysql access denied for root ... mysqld –skip-grant-tables 命令失效 ... Failed
    <!--密码突然登录不上MySQL了,久了也不晓得是不是密码不正确...只能改密码...一年难得碰一次,感觉每次总有莫名其妙的问题--><!--修改方案只找到一个,就是无密码验证开启mysql服务,然后登录,设置新密码--><!--mysql版本不同有些命令无效,大概分高低两版本--><!--低版命令我......
  • 关于Windows上设置MySQL为外部可访问
    改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改"mysql"数据库里的"user"表里的"host"项,从"localhost"改称"%"1.mysql-uroot-pdtsdtsmysql>usemysql;mysql>updateusersethost='%&#......
  • win10搭建mysql5.7环境
    下载mysql5.7下载官网地址https://downloads.mysql.com/archives/community/解压到指定目录我解压到D:\ProgramFiles\mysql-5.7.44创建配置文件my.ini在上述目录中创建my.ini文件,并添加如下配置项#Foradviceonhowtochangesettingspleasesee#http://dev.m......
  • mysqldump
     dockerrun-d--namebaize-rancher--restart=always-p28080:8080rancher/server:v1.6.30\--db-host192.168.50.105\--db-port3306\--db-usercattle\--db-pass******\--db-namecattledockerlogs-fbaize-rancher--tail100#导出单个数据......
  • 加入mysql数据库实现完整的登录注册功能
    功能简介:用户有用户名(user),手机号(mobile),邮箱(email),密码(password).user为主键,mobile唯一保证一个手机号只能注册一个用户,邮箱不唯一并且可为空.故这里用户可以使用user和mobile登录,mobile还可以用找回密码,email仅用于找回密码在注册页面,输入手机号和密码注册用户......
  • Linux 安装 MySQL
    转自:https://blog.csdn.net/bugu_hhh/article/details/130625482使用阿里云CentOS7系统,安装过程中,会报libaio,查看与libaio相关的软件1yumlistlibaio安装1yuminstall-ylibaio*可以查看已安装的MySQL的版本1mysql-V 使用开启MySQL服务命令1syste......
  • Ubuntu22.04安装mysql8数据库
    1、去官网下载APT存储库文件2、到/usr/local目录下创建mysql目录并且用rz命令上传下载的文件若没有安装lrzsz自行安装。3、解压下载的文件)直接选择OK4、更新包信息5、安装设置初始密码选第二个选项6、登录数据库......
  • 远程连接Mysql数据库
    showdatabases;usemysql;showtablse;selectuser,hostfromuser;updateusersethost='%'whereuser='root';flushprivileges;......