MySQL B+树相对于B树的区别及优势:

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL B+树相对于B树的区别及优势:

部分参考:B树和B+树的区别

MySQL为什么使用树结构?

    1. 文件很大,不可能全部存储在内存中,故要存储到磁盘上
    2. 索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关)
    3. 局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数(操作系统内存页的大小通常为4k)。其中MySQL B+树中的 叶/非叶节点 都是以MySQL的页为单位(大小通常也为16k),存放完整行记录。
    4. 数据库系统巧妙利用了磁盘预读原理,将一个节点大小设为操作系统内存页的整数倍,这样每个节点只需要一次I/O就可以完全载入。而红黑树这种结构,高度明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性。

    参考:磁盘读取

           计算机系统是分页读取和存储的,一般一页为4KB(8个扇区,每个扇区512B,8*512B=4KB),每次读取和存取的最小单元为一页,而磁盘预读时通常会读取页的整倍数。

           根据文章上述的【局部性原理】①当一个数据被用到时,其附近的数据也通常会马上被使用。②程序运行期间所需要的数据通常比较集中。由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间),所以即使只需要读取一个字节,磁盘也会读取一页的数据。

           MySQL InnoDB默认的页大小为16k(可通常 innodb_page_size 参数设置),而操作系统中的磁盘页大小通常为4k,所以这里可以认为MySQL InnoDB中的1页(1个磁盘块)相当于操作系统中的4页。

           这也就符合MySQL InnoDB所利用到的磁盘预读通常会预读操作系统页的整数倍(4倍)。具体如下图:

    image.gif编辑

          最外层浅蓝色磁盘块1里有数据17、35(深蓝色)和指针P1、P2、P3(黄色)。P1指针表示小于17的磁盘块,P2是在17-35之间,P3指向大于35的磁盘块。真实数据存在于叶子节点也就是最底下的一层3、5、9、10、13......非叶子节点不存储真实的数据,只存储指引搜索方向的数据项,如17、35。

         查找过程:例如搜索28数据项,首先加载磁盘块1到内存中,发生一次I/O,用二分查找确定在P2指针。接着发现28在26和30之间,通过P2指针的地址加载磁盘块3到内存,发生第二次I/O。用同样的方式找到磁盘块8,发生第三次I/O。

         真实的情况是,上面3层的B+Tree可以表示2k万的数据,这种量级的数据只发生了三次I/O,时间提升是巨大的。

    B树和B+树的区别:

      1. B树的每个节点都存储了key和data,而B+树的data存储在叶子节点上。
        B+树非叶子节点仅存储key不存储data这样一个节点就可以存储更多的key。可以使得B+树相对B树来说更矮(IO次数就是树的高度),所以与磁盘交换的IO操作次数更少。
      2. B+树所有叶子节点构成一个有序链表,按主键排序来遍历全部记录,能更好支持范围查找
        由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历,相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
      3. B+树所有的查询都要从根节点查找到叶子节点,查询性能更稳定;而B树,每个节点都可能查找到数据,需要在叶子节点和内部节点不停的往返移动,所以不稳定。
      相关实践学习
      如何快速连接云数据库RDS MySQL
      本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
      全面了解阿里云能为你做什么
      阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
      目录
      相关文章
      |
      1月前
      |
      存储 SQL 关系型数据库
      mysql 的ReLog和BinLog区别
      MySQL中的重做日志和二进制日志是确保数据库稳定性和可靠性的关键组件。重做日志主要用于事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务;而二进制日志记录SQL语句的逻辑变化,支持数据复制、恢复和审计。两者在写入时机、存储方式及配置参数等方面存在显著差异。
      |
      3月前
      |
      存储 关系型数据库 MySQL
      一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
      一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
      |
      13天前
      |
      存储 缓存 关系型数据库
      【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
      MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
      【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
      |
      1月前
      |
      存储 关系型数据库 MySQL
      MySQL引擎InnoDB和MyISAM的区别?
      InnoDB是MySQL默认的事务型存储引擎,支持事务、行级锁、MVCC、在线热备份等特性,主索引为聚簇索引,适用于高并发、高可靠性的场景。MyISAM设计简单,支持压缩表、空间索引,但不支持事务和行级锁,适合读多写少、不要求事务的场景。
      59 9
      |
      13天前
      |
      存储 关系型数据库 MySQL
      【MYSQL】 ——索引(B树B+树)、设计栈
      索引的特点,使用场景,操作,底层结构,B树B+树,MYSQL设计栈
      |
      2月前
      |
      存储 NoSQL 关系型数据库
      MySQL和Redis的区别
      **MySQL和Redis的区别** MySQL和Redis都是流行的数据存储解决方案,但它们在设计、用途和特性上有显著区别。理解这些区别有助于选择合适的数据库来满足不同的应用需求。本文将详细介绍MySQL和Redis的区别,包括它们的架构、使用场景、性能和其他关键特性。 ### 一、基本概述 **MySQL**: MySQL是一个关系型数据库管理系统(RDBMS),使用结构化查询语言(SQL)进行数据管理。它支持事务、复杂查询和多种存储引擎,广泛应用于各种Web应用、企业系统和数据分析项目。 **Redis**: Redis是一个基于内存的键值数据库,通常被称为NoSQL数
      141 4
      |
      2月前
      |
      存储 SQL 关系型数据库
      mysql 的ReLog和BinLog区别
      MySQL中的重做日志(Redo Log)和二进制日志(Binary Log)是两种重要的日志系统。重做日志主要用于保证事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务更改。二进制日志则记录了数据库的所有逻辑变化操作,用于数据的复制、恢复和审计。两者在写入时机、存储方式、配置参数和使用范围上有所不同,共同确保了数据库的稳定性和可靠性。
      |
      3月前
      |
      存储 SQL 关系型数据库
      mysql中主键索引和联合索引的原理与区别
      本文详细介绍了MySQL中的主键索引和联合索引原理及其区别。主键索引按主键值排序,叶节点仅存储数据区,而索引页则存储索引和指向数据域的指针。联合索引由多个字段组成,遵循最左前缀原则,可提高查询效率。文章还探讨了索引扫描原理、索引失效情况及设计原则,并对比了InnoDB与MyISAM存储引擎中聚簇索引和非聚簇索引的特点。对于优化MySQL性能具有参考价值。
      |
      3月前
      |
      存储 JSON 关系型数据库
      MySQL 5.x和MySQL 8.x到底有什么区别?
      本文详细对比了MySQL 5.x与MySQL 8.x的主要区别,包括存储引擎改进、性能提升、SQL语法增强(如窗口函数、CTE、JSON支持)、安全性和权限管理、并发及锁机制、InnoDB引擎增强、复制与高可用性等方面的显著差异。通过具体示例展示了8.x版本在企业级应用和高并发场景下的优越表现,建议有条件时尽早升级至MySQL 8.x以充分利用其新特性。
      |
      3月前
      |
      存储 关系型数据库 MySQL
      Mysql行格式DYNAMIC和COMPACT区别
      总之,选择哪种行格式取决于具体的应用场景,如数据类型分布、读写比例、存储与性能需求等。在处理大量文本或二进制数据且对存储空间敏感的应用中,DYNAMIC格式可能是更好的选择;而对于混合型数据且对读取性能有一定要求的场景,COMPACT格式可能更合适。在设计数据库时,评估这些因素并进行适当测试,可以帮助确定最适合的行格式。
      196 0

      推荐镜像

      更多