《MySQL怎样运行的》-从一条记录说起-InnoDB记录存储结构

我们都知道MySQL是用来存储数据的,那你有没有的疑问,他是怎么存储的,它实际上是在使用储存引擎,那如果有人问你MySQL的储存引擎有哪些你该怎么说呢,主要是有InnoDB,MyISAM还有MEMORY,后面两种在这里没有过多叙述,我们就来细说一下InnoDB这个储存引擎,我们知道数据存储在硬盘和磁盘里,如果我们想要在数据库里面拿出来,那我们还需不需要和云盘和磁盘打交道,但是这样太慢了,所以InnoDB就创建了页,将数据划分为若干个页,用页来磁盘与内存之间交互的基本单位。页的大小一般为16kb。

InnoDB行列式

他有很多种格式,COMPACT,REDUNDANT,DYNAMIC,COMPRESSED

我们今天来详细说一种COMPACT格式,虽然说各有不同,但是在原理上是大致相同的

上图就是COMPACT格式,他有变长字段长度列表,NULL值列表,记录头信息,还有记录的真实数据

1.记录的额外信息

也就是变长字段长度列表,和NULL值列表,记录头信息

变长字段长度列表

我们知道在MySQL中存在一些能够变长的数据类型,比如VARCHAR(),VARBINARY()等等,我们把拥有这些数据类型的列称之为变长字段。但是这些数据类型的字节数是不固定的,所以变长字段要存储的字节数也是不确定的,所以我们在这个变长字段长度列表中,还要存储这些数据类型的字节数,以防止突如其来的东西把MySQL给搞蒙

所以我们要存储两种东西

a.是真正的数据内容

b.是该数据所占据的字节数

另外该数据所占据的字节数是存放在变长字段长度列表的头部,各变长字段的真是数据的字节数排放的顺序是按逆序排放,逆序排放,逆序排放,重要的事情说三遍~

另外我其实还有个疑问就是,在这个变长字段长度列表中用多少字节来记录这些数据所占据的字节数?

其实是1字节或者2字节~ 听我给你解释~

下面我们需要用几个字母来表示含义W,M,L:

1.我们字符集用来表示一个字符需要的字节为W

2.我们在VARCHAR()最多存储的字符一共有M个,所有字节数为W*M

3.但是实际上存储的字符串是L个字节

如果W*M<=255,则用一个字节来表示

若W*M>255分为两种情况

        L<=127则用1个字节

        L>127则用2个字节

NULL值列表

对于这个部分,大家可能看见就知道他是用来干啥的,其实就是存放NULL的列

但是这个地方也是有些同学的难点所在~

其实就是在存放NULL值是是会有一个二进制位的值

如果该值位1是,就代表该列的值为NULL

如果该值为0是,就代表该列的值不为NULL

占1个字节,但是当表中的所有列都定义为NOT NULL时就会没有NULL值列表,会节省1个字节空间

记录头信息

它是由固定的五个字节组成的,40个二进制位,不同的位有不同的意义

这一部分说实话有点多,说几个比较重要的

  • delete_mask: 删除标志位,很重要。若此标志位为1,代表这条记录已经被删除了。
  • min_mask: B+树非叶子节点中,索引记录的中最小记录。后面讲到索引的时候再说。
  • n_owned: 分组里面包含的记录总数,分组后面再说。
  • heap_no: 后面再说。
  • record_type: 很重要,记录的类型(0-普通用户记录,1-索引记录,2-Infimum, 3-Supremum
  • next_record: 指针,指向下一条记录,很重要。

然后就是

MySQL为每个记录默认添加的列

row_id:这个列并不是必备的,占用空间为6个字节,行ID,唯一标识一条记录

trx_id:这个列是必备的,占用空间为6个字节,事务ID

roll_pointer:这个列是必备的,占用空间为7个字节,回滚指针

这就是这一章的内容并不是很难,下一个我们来说一下第五章InnoDB数据页结构~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

webpack5基础和开发模式配置

运行环境 nodejs16 webpack基础 webpack打包输出的文件是bundle 打包就是编译组合 webpack本身功能 仅能编译js文件 开始使用 基本配置 五大核心概念 准备webpack配置文件 1.在根目录 2.命名为webpack.config.js 开发模式介绍 处理样式资源 处理css样式资源文件…

5W 1.5KVDC、3KVDC 宽电压输入 DC/DC 电源模块——TP05DA 系列,广泛应用于通信、铁路等设备中

TP05DA系列电源模块额定输出功率为5W&#xff0c;外形尺寸为31.75*20.32*10.65&#xff0c;应用于2:1及4:1电压输入范围 9V-18V、18V-36V、36V-72V、9V-36V和18V-72VDC的输入电压环境&#xff0c;输出电压精度可达1%&#xff0c;具有输出短路保护等功能&#xff0c;可广泛应用于…

导出excel带水印

需要一些前置知识(一些基本知识) 导出excel带水印:前置知识1 BufferedImage和ImageIO 导出excel带水印:前置知识2 Graphics2D用法 导出excel带水印:前置知识3 ByteArrayOutputStream 导出excel带水印:前置知识4 BigExcelWriter 导出excel带水印:前置知识5 POI包 前端代码就不贴…

产线虚拟现实vr仿真软件开发在线上能全面呈现企业品质和专业度

在数字化浪潮中&#xff0c;上海VR全景场景制作公司凭借其领先的VR全景制作技术&#xff0c;正为各行各业带来前所未有的沉浸式体验。无论是学校企业场地的生动展示&#xff0c;还是汽车内饰与外观的360度全景呈现&#xff0c;我们都能通过VR虚拟现实制作技术&#xff0c;让您的…

v-rep---script-function

作用&#xff0c;实现&#xff0c;参数讲解。 script-function标签 作用 问题&#xff1a;如何在插件的接口中调用lua脚本中定义的函数&#xff1f; 用于声明一个函数&#xff0c;这个函数的作用是通过v-rep提供的接口sim::callScriptFunctionEx()调用脚本的函数&#xff0…

AI绘画Stable Diffusion【艺术写真】:蒙版法图生图,局部重绘实现AI艺术写真

大家好&#xff0c;我是设计师阿威 之前我分享过几篇使用SD插件换脸方式实现AI写真的教程&#xff0c;主要存在2个大的问题。 &#xff08;1&#xff09;人脸相似度 &#xff08;2&#xff09;生成的图片整体色调有时候会比较怪异 对于上面的问题&#xff0c;在对图片质量要…

43、Flink 的 Window Join 详解

1.Window Join a&#xff09;概述 Window join 作用在两个流中有相同 key 且处于相同窗口的元素上&#xff0c;窗口可以通过 window assigner 定义&#xff0c;并且两个流中的元素都会被用于计算窗口的结果。 两个流中的元素在组合之后&#xff0c;会被传递给用户定义的 Joi…

如何将红酒配餐融入日常生活

红酒配餐不仅可以提升用餐的品质&#xff0c;还可以为日常生活增添一份优雅和情调。云仓酒庄雷盛红酒以其卓着的品质和丰富的口感&#xff0c;成为了实现红酒配餐融入日常生活的理想选择。下面将介绍如何将雷盛红酒配餐融入日常生活。 首先&#xff0c;了解红酒的基本知识。了解…

02--大数据Hadoop集群实战

前言&#xff1a; 前面整理了hadoop概念内容&#xff0c;写了一些概念和本地部署和伪分布式两种&#xff0c;比较偏向概念或实验&#xff0c;今天来整理一下在项目中实际使用的一些知识点。 1、基础概念 1.1、完全分布式 Hadoop是一个开源的分布式存储和计算框架&#xff0…

yolov10 使用自己的数据集训练目标检测模型

1 环境配置(使用anaconda) conda create -n yolov10 python=3.9 //创建虚拟环境 conda activate yolov10 //激活虚拟环境 pip install -r requirements.txt //执行yolov10 路径下requirements.txt 安装依赖 pip install -e .2.数据集制作 使用lableImage制作数据集(win版…

Zookeeper的watch 机制

Watch机制介绍 我们可以把Watch理解成是注册在特定Znode上的触发器。当这个Znode发生改变&#xff0c;也就是调用了create&#xff0c;delete&#xff0c;setData方法的时候&#xff0c;将会触发Znode上注册的对应事件&#xff0c;请求Watch的客户端会收到异步通知 ZooKeeper…

记录深度学习GPU配置,下载CUDA与cuDnn

目标下载: cuda 11.0.1_451.22 win10.exe cudnn-11.0-windows-x64-v8.0.2.39.zip cuda历史版本网址 CUDA Toolkit Archive | NVIDIA Developer 自己下载过11.0.1版本 点击下载local版本,本地安装,有2个多GB,很大,我不喜欢network版本,容易掉线 cuDnn https://developer.nvi…

521源码-免费游戏源码下载-闯梦江湖Q萌复古全网通手游服务端H5全攻略

闯梦江湖H5&#xff1a;Q萌复古全网通手游服务端全攻略 一、概述 闯梦江湖H5 是一款结合Q萌画风与复古情怀的全网通H5手游。我们为您提供了最新打包的Windows服务端&#xff0c;并附带了通用视频架设教程和GM网页授权后台工具&#xff0c;让您轻松搭建并管理自己的游戏世界。 …

Spring 对 Junit4,Junit5 的支持上的运用

1. Spring 对 Junit4,Junit5 的支持上的运用 文章目录 1. Spring 对 Junit4,Junit5 的支持上的运用每博一文案2. Spring对Junit4 的支持3. Spring对Junit5的支持4. 总结&#xff1a;5. 最后&#xff1a; 每博一文案 关于理想主义&#xff0c;在知乎上看到一句话&#xff1a;“…

合约demo——hello contract

520的日子&#xff0c;没出现在各大水群&#xff0c;假装忙着约会&#xff0c;实则在这偷偷躲起来写博客&#xff0c;不能让人发现我今天很有空都没人约๑乛◡乛๑ 智能合约开发 性质 根本性质&#xff1a;表达商业、“法律”关系的契约 机制 运行机制 Transation驱动的E…

编程5年的老哥说:我代码里从来不用锁,谁爱...

技多不压身&#xff01; 大家好&#xff0c;我是 javapub。 今天一个朋友找我吐槽&#xff0c;说自己平时在工作中几乎用不到需要上锁的场景&#xff0c;就算有也只是并发很小、或者直接从有业务设计上就规避掉了。但一到面试&#xff0c;都是各种锁题&#xff0c;很头疼。 面…

浅谈JMeter运行原理

浅谈JMeter运行原理 JMeter架构基础 JMeter基于Java平台开发&#xff0c;运行于Java虚拟机&#xff08;JVM&#xff09;之上。这意味着它可以在任何支持JVM的操作系统上运行&#xff0c;包括Windows、Linux、macOS等。其核心架构设计围绕着多线程执行机制&#xff0c;这使得它…

Android 13 高通设备热点低功耗模式

需求: Android设备开启热点,使Iphone设备连接,自动开启低数据模式 低数据模式: 低数据模式是一种在移动网络或Wi-Fi环境下,通过限制应用程序的数据使用、降低数据传输速率或禁用某些后台操作来减少数据流量消耗的优化模式。 这种模式主要用于节省数据流量费用,特别是…

spring boot 项目配置支持https

前言 本地的项目接口 需要支持https访问 准备 java环境 由于我们使用的是java自带的 keytool工具java 生成根证书 环境是必须的 实战 生成 https证书# alias 别名 keystore 存储文件名称 storepass 存储密码 validity 有效期&#xff08;天数&#xff09; keytool -genk…

4---git命令详解第一部分

一、提交文件方面命令&#xff1a; 1.1第一步&#xff1a;将需要提交的文件放进暂存区&#xff1a; 添加单个文件到暂存区stage&#xff1a; git add 文件名 添加多个文件到暂存区&#xff1a; git add 文件名1 文件名2 ... 将目录下所有文件添加到暂存区&#xff1a; git…