mysql 为什么使用 B+树

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 索引结构默认使用B+树,而不是二叉树,红黑树,b树,哈希的原因

B+树结构 and 为什么

数据结构演示网页

索引结构默认使用B+树,而不是二叉树,红黑树,b树,哈希

为什么?


什么是索引

索引就是一种单独的数据结构,用来对数据库的数据进行快速检索的数据结构,他针对某个表中的一列或者多列。

简单的说就相当于图书的目录,你可以根据目录快速找到自己想要的内容


二叉树

每个根节点最多有两个子节点

二叉搜索树 – 左子树小于根节点,右子树大于父节点,二分搜索的结构化

最好情况 – logN

最坏情况 – n


红黑树

自平衡的二叉搜索树

特性:

  • 每个节点都是黑色或者红色的
  • 根节点是黑色的
  • 如果一个节点是红色,他的子节点一定是黑色
  • 从一个节点到该节点所有叶子节点的路径上包含相同数据的黑色节点
  • 所有叶子节点都是黑色的(叶子节点的值为 null)

即使红黑树 也是一个二叉树,随着数据量的增多,红黑树的层级会越来越深,检索速度会越来越慢


B-树

红黑树是一个二叉树,那B树就是一个多叉树,B树每个节点有多个分支,即多叉

2db526edcf35c4aac0e2c536fabd44e.png

特点:

  • 在B树中,所有叶子结点和非叶子节点都会储存数据!!
  • n阶的B树只能储存n-1个key, n个指针
  • 一旦节点储存的数量达到n,就会发生裂变,中间元素向上分裂

B+树

B+树是 B 树的一个变种

2db526edcf35c4aac0e2c536fabd44e.png

和B树的区别:

  • 只有叶子结点才会储存数据!!
  • 非叶子节点只会储存索引
  • 叶子节点之间会形成一个链表,这个链表的所有元素都是有序排列的


Mysql 的B+树

Mysql对经典的B+树进行了优化,在原有的基础上,增加了指向相邻叶子节点的指针,把一个单向的链表变成了双向链表,这样就更方便查找了

B+树只有叶子结点储存数据

2db526edcf35c4aac0e2c536fabd44e.png


为什么使用B+树

Innodb 的逻辑储存结构

2db526edcf35c4aac0e2c536fabd44e.png

  • 表空间
  • 区 – 一个去64页, 1M
  • 页 – 一页16k ,16 * 1024
  • 行 – 数据是按行进行存放的

为什么使用B+树

  • 和二叉树相比。B+树层级更低,索引效率高
  • 和B树相比。B树和B+树的索引的叶子节点都是储存在一个页上面的,而页的大小是固定的。

B+树的非叶子结点只存储键值和指针,而B树连带数据一起存储。这样就导致相同大小的页,使用B树的键值和指针会变少,就会增加树的高度,增加IO次数,导致性能降低

  • 和哈希相比,B+树支持范围查找,排序查找,而哈希不支持

思考题:

假设:一行数据大小为1k,一页可以储存16行这样的数据。Innodb的指针占用6个字节的空间,键值采用BigInt,查8个字节的空间,问能储存多少数据

索引由键值和指针组成,n个键,n+1个指针

n*8 + (n+1) * 6 = 16 * 1024 , 计算得出 n = 1170

高度为2:

1171 * 16 = 18736

高度为3

1171 * 1171 * 16 = 21,939,856

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
关系型数据库 MySQL 索引
【MySQL 解析】Hash索引和B+树索引对比分析
【1月更文挑战第11天】【MySQL 解析】Hash索引和B+树索引对比分析
|
7月前
|
存储 关系型数据库 MySQL
为什么MySQL用B+树做索引而不使用其他的数据结构呢?
为什么MySQL用B+树做索引而不使用其他的数据结构呢?
|
存储 关系型数据库 MySQL
6.2.3 【MySQL】InnoDB的B+树索引的注意事项
6.2.3 【MySQL】InnoDB的B+树索引的注意事项
84 0
|
3月前
|
存储 缓存 关系型数据库
|
3月前
|
存储 关系型数据库 MySQL
MySQL 为什么使用 B+ 树作为索引结构?
MySQL 为什么使用 B+ 树作为索引结构?
158 2
|
4月前
|
存储 关系型数据库 MySQL
MySQL为何偏爱B+树而非跳表?
【8月更文挑战第9天】在数据库的世界里,索引是提升查询效率的关键。而在MySQL这样的关系型数据库管理系统中,B+树作为索引结构的首选,其背后的原因值得我们深入探讨。本文将从技术角度解析,为何MySQL选择B+树而非跳表作为其索引结构的核心。
268 6
|
4月前
|
存储 关系型数据库 MySQL
"揭秘!MySQL为何独宠B+树?跳表再牛,也敌不过这性能王者的N重诱惑!"
【8月更文挑战第11天】MySQL作为主流关系型数据库,优选B+树而非跳表作为索引结构,基于其对范围查询的支持、低磁盘I/O开销及事务处理能力。B+树叶节点构成有序链表,利于范围查询;较矮的树形结构减少了磁盘访问次数;支持多版本并发控制,保障事务ACID特性。而跳表在线性扫描范围查询时效率低,难以高效实现事务管理,且额外指针增加空间消耗。示例代码展示了B+树节点分裂过程,突显其内部机制。综上,B+树为MySQL提供了高性能、可靠的数据存储与检索能力。
154 4
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL技术内幕】5.6-B+树索引的使用
【MySQL技术内幕】5.6-B+树索引的使用
49 4
|
7月前
|
存储 关系型数据库 MySQL
【MySQL 解析】数据库为什么使用B+树而不是B树
【1月更文挑战第11天】【MySQL 解析】数据库为什么使用B+树而不是B树
|
5月前
|
存储 关系型数据库 MySQL
如何理解Mysql的索引及他们的原理--------二叉查找树和平衡二叉树和B树和B+树
如何理解Mysql的索引及他们的原理--------二叉查找树和平衡二叉树和B树和B+树