为什么MySql使用B+树

news2024/11/14 14:16:20

mysql索引为什么选择B+树?

在回答这个问题之前,得先了解一个概念,页的概念。页是InnoDB中数据管理的最小单位。当我们查询数据时,其是以页为单位,将磁盘中的数据加载到缓冲池中的。同理,更新数据也是以页为单位,将我们对数据的修改刷回磁盘。每个数据页16kb,一个数据页大约16k,也就是说一个数据区可以包含64个连续的数据页。

图片

页头部保存了两个指针,分别指向前一个页和后一个页,头部还有页的类型信息和用来唯一标识页的编号。根据这个指针分布可以想象到页链接起来就是一个双向链表。

有了这个概念,我们看一下,如果选择B树,会是什么个情况。

B树有两个特点,和二叉树相比,B树每个节点有更多的子节点,B树每个节点上不仅有索引信息,还存放了数据。

图片

简化B树

B+树和B树相比,有一点是一样的,每个节点有更多的子节点,那他们不同点在哪里呢?B+树内部节点不存储数据,所有的数据都存储在叶子节点。第二点,为所有叶子节点增加了一个链指针。

图片

简化B+树

那么,B树和B+树的差异,会引起什么问题呢?我们来做一个思维实验,假设每次内存从磁盘中只加载一页,实际上不是,会加载很多页,我们为了方便问题讨论,便假设只加载一页。有一个查询语句,需要查询范围30到60之间的数据。对于B树,由于内部节点上存了数据信息,导致一页上索引元素相对就少了很多,第一次搜索到Page1,据此,可以定位到Page4,30到50之间的数据就可以拿到了,这个时候需要进行一次中序遍历,先回到Page4的根节点,再执行一次中序遍历返回到Page1和Page2的根节点,最终搜索到Page2,由此定位到Page5,获取50到60之间的数据,由此,可见,为了获取这个范围内的数据,需要多了几次遍历查找。那么,如果选择B+树,由于内部节点不存储数据,只存储索引信息,因此,一页可以包含更多的索引信息,因此,查询的时候,定位到Page1的数据,根据索引信息,可以查询到Page3,一次拉取,即可实现30到60之间的数据查询。

众所周知,索引的功能和新华字典的目录的功能是一样的,根据字母粗定位一个汉字大概在哪些页。B+树内部节点就像现在新华字典的目录一样,不包含数据,只有索引信息,因此,一页目录上包含了更多的索引信息,可以减少翻页的次数。而B树把数据和索引信息放到了一起,这个效果就像新华字典的目录中不仅有索引信息,还有具体的汉字信息,那么一页能展示的信息就很少了,需要翻页更多次才能实现定位,效率就低下了。

B+树另外一个特点,为所有叶子节点增加了一个链指针。根据空间局部性原理:如果一个存储器的某个位置被访问,那么将它附近的位置也会被访问。而且他们在磁盘里是顺序存储的,所以当读到某个值的时候,磁盘预读原理就会提前把这些数据都读进内存,使得范围查询和排序都很快。比如,我们访问key为20的数据,那么key为30,40,55,50的数据也被加载进内存,这样可以减少内存和磁盘之间的交互。

基于,以上两点,所以选择了B+树索引。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库实验一 创建数据库

一.实验目的 1.学会数据表的创建; 2.加深对表间关系的理解; 3.理解数据库中数据的简单查询方法和应用。 二. 实验内容 1.题目要求 给定一个实际问题,实际应用问题的模式设计中至少要包括3个基本表。应用问题是供应商给工程供…

被嫌弃的35岁程序员,竟找到了职业的新出路:PMP项目管理

35岁,本应是事业发展的高峰期。更多听到的却是35岁职场天花板,特别是IT从业者,35岁就好像是一道迈不过的坎:多年的工作经验,在35岁的生理年龄面前,一文不值。 IT从业者若想安然度过“35岁危机”&#xff0…

【RISC-V设计-14】- RISC-V处理器设计K0A之打印输出

【RISC-V设计-14】- RISC-V处理器设计K0A之打印输出 文章目录 【RISC-V设计-14】- RISC-V处理器设计K0A之打印输出1.简介2.验证用例3.软件代码4.链接脚本5.编译脚本6.仿真结果6.1 复位结束6.2 运行成功6.3 终端打印 7.总结 1.简介 本文将详细阐述如何利用 printf 来打印字符串…

做自媒体博主如何使用外网视频素材!

想成为视频博主却不知道外网视频怎么下载?看这里! 在这个信息爆炸的时代,做一名视频博主无疑是展现自我、分享创意的绝佳方式。但当我们想要获取更多灵感,从外网的精彩视频中学习时,却常常被下载的问题难住。 其实&…

【启明智显技术分享】工业级HMI芯片Model3A开发过程中问题记录笔记

一、Model3A芯片介绍 Model3A是启明智显针对工业、行业以及车载产品市场推出的一款高性能、低成本的工业级HMI(Human-Machine Interface,人机界面)芯片。该芯片主要应用于工业自动化、智能终端HMI、车载仪表盘、两轮车彩屏仪表、串口屏、智能…

无人机航拍与ArcGIS融合实战:从地表观测到空间数据可视化的全方位指南!无人机图像拼接数据处理与分析、可视化与制图

目录 第一章 无人机航拍基本流程、航线规划与飞行实践 第二章 无人机图像拼接软件的学习与操作实践 第三章 无人机图像拼接典型案例详解 第四章 无人机图像拼接数据在GIS中的处理与分析 第五章 无人机图像拼接数据在GIS中的可视化与制图 第六章 综合案例:无人机航拍植被动…

Docker 部署 XXL-JOB

Docker 部署 XXL-JOB 目录 引言环境准备创建 MySQL 用户并授予权限使用 Docker 部署 XXL-JOB配置 XXL-JOB验证部署总结 1. 引言 XXL-JOB 是一个开源的分布式任务调度平台,旨在简化定时任务的管理和调度操作。其强大的功能和灵活性,使其在互联网公司和…

SSH 隧道方式连接 MySQL 服务器

SSH 隧道方式连接 MySQL 服务器 1 安装 MySQL 客户端工具1.1 Navicat1.2 MySQL Workbench1.2.1 查看本机系统类型1.2.2 安装 Visual C 20191.2.3 安装 MySQL Workbench 2 SSH 隧道方式连接数据库2.1 Navicat2.1.1 SSH 连服务器2.1.2 本地连数据库 2.2 MySQL Workbench 本文介绍…

云动态摘要 2024-08-12

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 全球加速 GA - 新增“巴西(圣保罗)”、“沙特(利雅得)”接入点 华为云 2024-08-12 全球加速服务新增开通“巴西(圣保罗)”、“沙特&a…

BI奇点来临,AIChat打通数据消费“最后一公里”

“把数据用起来和用好”,这是企业数智化转型升级中的一大核心命题。但现实情况中,大部分企业在业务应用和数据消费中始终难以做到得心应手。 直到大模型的崛起,生成式AI技术展现出强大能力,为彻底打通数据消费“最后一公里”带来…

NUC 14 Pro+:灵感加速器,创意无界之旅

喜欢创作的友友们皆懂,灵感如流星,可遇不可求,当它闪烁在你的脑海中,需要即刻行动,将其化为现实。而NUC 14 Pro就将在这时,给予你独特的支持。 灵感火花,瞬间点燃 触摸NUC 14 Pro的轻薄机身&am…

新手常见错误:java.lang.NumberFormatException: For input string: “xxxx“

目录 ​编辑 故事背景 文言一心解答: 思考: 文心一言总结: 报错总结: 解决方案: 结语: 故事背景 写代码的时候遇到的报错 文言一心解答: 这个错误 java.lang.NumberFormatException:…

【后端记录】修复MySql的错误修改的数据记录【binlog修复】

前言 今天入门后端的时候,不小心改了非预期的数据,因为还没学到事务,所以恢复数据还比较麻烦,站在巨人的肩膀上还是解决了,原文连接在下面 https://blog.csdn.net/qq_42874315/article/details/140480570 解决办法 原…

Python光电光对光神经网络非相干光图像低维映射模拟

🎯要点 🎯光学神经网络非相干光图像处理 | 🎯光电光对光处理多层光学神经网络 | 🎯光图像传感器构建两层神经网络 | 🎯非相干光输入图像映射到低维空间 | 🎯多层非线性对比浅层线性光神经网络 | &#x1f…

国标POE电源芯片52V转12V 1.5A用AH7691D

​在深入探讨国标POE(Power Over Ethernet)电源芯片AH7691D如何将52V直流电压高效转换为12V 1.5A的稳定输出时,不得不提及其卓越的能效比与可靠性设计。AH7691D作为一款专为POE供电系统设计的降压转换芯片,不仅拥有高精度的电压调…

数据结构入门——03链表

1. 链表的结构 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的。 结点的data域存放数据元素ai,而next域是一个指针,指向ai的直接后继ai1所在的结点。 1.1链表的分类 实际中要实…

利用matlab生成一注特别的大乐透机选程序

玩法说明: 代码: front randi([1,35],5,5) %前区随机生成(1-35),生成5行5列rear randi([1,12],1,2)%后区随机生成(1-12),生成1行2列front_r []%用来保存前区号码结果 rear_r rear%用来保存后区号码结果for i 1:size(front, 1) % 遍历每一行 for j 1:length(front(i,:)) …

OpenCV图像处理——直线拟合并找出拟合直线的起点与端点

引言 对轮廓进行分析,除了可以对轮廓进行椭圆或者圆的拟合之外,还可以对轮廓点集进行直线拟合。在 OpenCV 中,直线拟合通常是通过 cv::fitLine 函数实现的,该函数采用最小二乘法对一组 2D 或 3D 点进行直线拟合。对于 2D 点集&am…

【数据结构】详细剖析链表,带你实现单链表,双向链表,附链表编程练习题

目录 一. 链表 1. 链表的概念及结构 2. 单链表的实现 2.1 单链表节点结构 2.2 动态申请一个节点 2.3 单链表打印 2.4 单链表尾插 2.5 单链表头插 2.6 单链表尾删 2.7 单链表头删 2.8 单链表查找 2.9 单链表在pos后一位插入x 2.10 单链表删除pos后一位的值 2.11 …

《软件性能测试分析与调优实践之路》(第2版) 读书笔记(一)总体介绍(上)-真正从性能分析与调优来看性能测试

《软件性能测试分析与调优实践之路》(第2版) 是清华大学出版社出版的一本图书,作者为张永清,全书共分为9章,如下图所示 图书介绍:《软件性能测试分析与调优实践之路》(第2版) 1、为什么需要性能测试与分析 1)、了解…