【MySQL】表中的一条数据在磁盘上是如何存放的?

news2024/9/28 15:21:45

文章目录

    • 1 InnoDB行格式
    • 2 COMPACT行格式
      • 2.1 记录的额外信息
      • 2.2 记录的真实数据
    • 3 Dynamic & Compressed
    • 4 VarChar(n)中n的最大取值?

1 InnoDB行格式

不同的存储引擎一般是为实现不同的特性来开发的,真实数据在不同存储引擎中的存放格式一般是不同的,甚至有的存储引擎(比如 MEMORY)都不用磁盘来存储数据,也就是对于使用 MEMORY 存储引擎的表来说,关闭服务器后表中的数据就消失了。 lnnoDB是MySQL 默认的存储引擎,也是我们最常用到的存储引擎。

当我们想从表中获取某些记录时, lnnoDB 存储引擎需要一条一条地把记录从磁盘上读出来么?不,这样重复访问磁盘会非常非常非常慢😶,lnnoDB 采取的方式是,将数据划分为若干个页 ,以页作为磁盘和内存之间交互的基本单位。lnnoDB 页的大小一般为16KB = 16384B 。也就是在一般情况下,一次最少从磁盘中读取 16KB 的内容到内存中,一次最少把内存中的 16KB 内容刷新到磁盘中。

Tips:系统变量innodb_page _size只能在第一次初始化MySQL数据目录时指定,运行过程中不可更改页面大小。

我们平时都是以记录为单位向表中插入数据的,这些记录在磁盘上的存放形式也被称为行格式或者记录格式,可以在创建或修改表的语句中指定记录所使用的行格式。目前有4种行格式:

  • COMPACT:占用空间较小,适合具有大量重复数据的表。
  • REDUNDANT:不再被推荐使用,用于兼容旧版本。
  • DYNAMIC:支持更多的数据类型和功能,适用于各种情况。
  • COMPRESSED:将数据进行压缩,可以显著减小存储空间,但可能会增加CPU负担。

2 COMPACT行格式

2.1 记录的额外信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opno3O4M-1691565461901)(【MySQL】表中的一条数据在磁盘上是如何存放的?/image-20230809141938930.png)]

1、变长字段长度列表(如果无变长字段,没有该部分)

变长字段列表仅存储非NULL列。

VARCHAR(M)、 BINARY(M)、各种 TEXT 类型、各种 BLOB 类型等变长字段占用的存储空间分为两部分:真正的数据内容 + 该数据占用的字节数。COMPACT 行格式中,所有变长字段的真实数据占用字节数都存放在记录的开头位置,各变长字段的真实数据占用的字节数按照列顺序逆序存放

1个字节能表示的最大值为0xFF = 255,2个字节能表示的最大值为0xFFFF = 65535。给定以下符号表示。

  • W W W:某个字符集中最多需要W字节来表示一个字符,比如utf8mb4字符集中的W就是4

  • M M M:对于变长类型 VARCHAR(M),能存储最多M个字符

  • L L L:该变长字段实际存储的字符串占用的字节数是 L

如果该变长字段允许存储的最大字节数 M × W M\times W M×W 超过 255 字节,并且真实数据占用的字节数 L L L超过 127 字节,则使用2字节来表示真实数据占用的字节数,否则使用1字节。

如果某个字段占用的字节数特别多, InnoDB 有可能把该字段的值的一部分数据存放到所谓的溢出页中。

对于 CHAR(M)类型的列来说,当列采用的是定长编码的字符集时,该列占的字节数不会被加到变长字段长度列表:而如果采用变长编码的字符集时 该列占用的字节数就会被加到变长字段长度列表。

2、NULL值列表(如果无NULL值,没有该部分)

COMPACT 行格式把一条记录中值为 NULL 的列统一管理起来 ,存储到 NULL 值列表。对表中未限制Not Null的列,按列顺序逆序存储二进制位,1代表NULL,0代表不为NULL。MYSQL规定NULL值列表必须为整数字节,若不足,在高位补0。

3、记录头信息(固定5字节)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LYOKCh2Q-1691565461902)(【MySQL】表中的一条数据在磁盘上是如何存放的?/image-20230809140739253.png)]

2.2 记录的真实数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndXUAMVp-1691565461903)(【MySQL】表中的一条数据在磁盘上是如何存放的?/image-20230809142325572.png)]

3 Dynamic & Compressed

如果某个字段占用的字节数特别多, InnoDB 有可能把该字段的值的一部分数据存放到所谓的溢出页中,在记录的真实数据处只会存储该列的部分数据,而把剩余的数据分散存储在几个其他的页中 然后在记录的真实数据处用 20 字节存储指向这些页的地址。

img

Compressed 和 Dynamic 这两个行格式和 Compact 非常类似,主要的区别在于处理行溢出数据时有些区别。

这两种格式采用完全的行溢出方式,记录的真实数据处不会存储该列的一部分数据,只存储 20 个字节的指针来指向溢出页。而实际的数据都存储在溢出页中。

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3h6qYjgz-1691565461903)(【MySQL】表中的一条数据在磁盘上是如何存放的?/image-20230809144148449.png)]

4 VarChar(n)中n的最大取值?

MySQL规定:一行记录除了 TEXT、BLOBs 类型的列(不包括隐藏列和记录头信息),限制最大为 65535 字节。

SO:要保证所有字段的长度 + 变长字段字节数列表所占用的字节数 + NULL值列表所占用的字节数 <= 65535

在这里插入图片描述

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

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

相关文章

Sentieon | 每周文献-Long Read Sequencing(长读长测序)-第七期

长读测序系列文章-1 标题&#xff08;英文&#xff09;&#xff1a; PrecisionFDA Truth Challenge V2: Calling variants from short and long reads in difficult-to-map regions标题&#xff08;中文&#xff09;&#xff1a; PrecisionFDA真相挑战第二版&#xff1a;利用短…

React源码解析18(2)------ FilberNode,FilberRootNode结构关系

摘要 在上一篇&#xff0c;我们实现了通过JSX转换为ReactElement的方法&#xff0c;也看到了转换后React元素的结构。但是这个React元素&#xff0c;并不能很清楚的表达组件之间的关系&#xff0c;以及属性的处理。 所以在React内部&#xff0c;会将所有的React元素转换为Fil…

银行高效办公神技,看完跪了!

在现代社会中&#xff0c;银行作为金融体系的关键组成部分&#xff0c;不仅需要保障日常的业务运作&#xff0c;还必须在电力故障等紧急情况下保持连续性。 蓄电池作为一种关键设备&#xff0c;需要持续的监控和维护&#xff0c;以确保其可靠性和性能。因此&#xff0c;银行网点…

Salesforce 助理认证和管理员认证有何区别?备考者应如何选择?

随着Salesforce生态系统对专业人员的需求不断增长&#xff0c;获得相关认证对于寻求职业发展的从业者来说至关重要。 对于刚接触Salesforce平台的人而言&#xff0c;Salesforce助理认证和Salesforce管理员认证是两个比较基础的认证。这两个认证有什么区别呢&#xff1f;从业者…

python爬虫实战(1)--爬取新闻数据

想要每天看到新闻数据又不想占用太多时间去整理&#xff0c;萌生自己抓取新闻网站的想法。 1. 准备工作 使用python语言可以快速实现&#xff0c;调用BeautifulSoup包里面的方法 安装BeautifulSoup pip install BeautifulSoup完成以后引入项目 2. 开发 定义请求头&#xf…

国内数字藏品行业现状分析

国内数字藏品行业现状分析 NFT与国内数字藏品的区别 数字藏品是NFT的一种应用形式&#xff0c;国内数字藏品与NFT本质区别在于国内数字藏品不具备NFT的金融属性及社交属性,与虚拟货币划清了明确的界限。 国内数字藏品所处的发展阶段 发展阶段(成长期&#xff09;。 由于加密…

24届近5年中国计量大学自动化考研院校分析

今天给大家带来的是中国计量大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、中国计量大学 学校简介 中国计量大学是我国质量监督检验检疫行业唯一的一所本科院校&#xff0c;是一所计量标准质量检验检疫特色鲜明、多学科协调发展的普通高校&#xff0c;坐落于…

springboot添加swagger和knife简化接口测试

1、添加依赖 <!-- 接口测试包--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><!--排除swagger2的annotations和models依赖&#xff0c;然后再引入1.5.21版本的annotations和models…

Pr2022安装插件beat edit安装之后无法加载音乐怎么办?

你运行设置不对&#xff0c;安装好后试试管理员权限运行。 安装好插件后点击上方的窗口&#xff0c;然后再在里面找到扩展&#xff0c;继续点开里面有个BeatEdit&#xff0c;就是插件本身&#xff0c;点开。先选择一个加载音乐的选项&#xff0c;载入音乐先。这个时候可以按下…

一篇文章教会你什么是Linux进程控制

Linux进程控制 进程创建1.fork函数初识1.1那么fork创建子进程时&#xff0c;操作系统都做了什么呢&#xff1f;1.2 父子进程和CPU中的EIP&#xff08;指令指针&#xff09;之间存在一定的关系1.3 fork的常规用法有哪些&#xff1f;1.4 fork调用失败的原因有哪些&#xff1f; 2.…

TLS洪水攻击是什么,当网络加密成为一种负担怎么办?

今天&#xff0c;我们将深入研究一种典型的DDOS攻击类型——TLS洪水攻击&#xff0c;TLS&#xff08;传输层安全&#xff09;洪水攻击可以淹没大多数DDoS防护解决方案。因此如果您使用了错误的解决方案&#xff0c;意味着您的Web应用程序面临很大的风险&#xff01; 今天将由火…

云端同步、高效无界:5款免费的跨平台思维导图软件推荐!

思维导图是一种以图形化方式表示思想、概念或任务的方法&#xff0c;可以帮助用户梳理思维、提高记忆和理解。在工作中&#xff0c;思维导图可以用于会议记录、任务规划、项目管理等&#xff0c;帮助提高工作效率和团队协作能力&#xff1b;在学习中&#xff0c;思维导图可以用…

HA3 SQL样本实验:一种混合计算查询的全新样本解决方案

作者&#xff1a;陆唯一(芜霜) HA3&#xff08;对外开源代号&#xff1a;Havenask &#xff09;是阿里智能引擎团队自研的大规模分布式检索系统&#xff0c;广泛应用于阿里内部的搜索业务&#xff0c;是十多年来阿里在电商领域积累下来的核心竞争力产品。Ha3 SQL 是在原有Ha3引…

IDEA简单拷贝一份新项目记录

IDEA简单拷贝项目记录 拷贝后改项目名&#xff0c;然后iml 配置文件改项目名&#xff0c;然后 .idea 中的compiler.xml 里面的name标签改项目名。 就可以了

Sentieon|应用教程:利用Sentieon Python API引擎为自研算法加速

背景 Sentieon套装中所有模块的速度都远超对应开源软件的数倍至数十倍&#xff0c;用户在使用这些模块的同时&#xff0c;有时也希望Sentieon团队可以帮助加速自己开发的定制化软件。为了帮助这些用户能在自研软件上享受到Sentieon模块的速度&#xff0c;我们开发了Python API…

续签四年的榜一大哥,打动他的竟是

今天要聊的是一位来自有福之州的医疗客户&#xff0c;从产品落地至今一直使用&#xff0c;连续四年不断续约&#xff0c;名副其实的榜一大哥。最初打动用户的&#xff0c;来自技术团队的服务能力&#xff0c;以及客户对新生产品期待和支持&#xff0c;而五年来不离不弃&#xf…

vue 点击顶部tab重新请求列表

我们点击 1 2 来回切换时,发现客户经理的列表不会重新请求(菜单中含有客户经理) 这时我们添加以下代码就可以了 watch: {$route(route) {this.getList()}},/** 查询客户经理列表 */getList() {this.loading true;listManager(this.queryParams).then(response > {this.mana…

低代码如何实现高效率开发?

在高度变化的市场环境下&#xff0c;企业亟需形成以数据为驱动的新型生产运营方式&#xff0c;提升价值、创新模式、降低成本&#xff0c;以建立新一轮的核心竞争优势。在此背景下&#xff0c;数字化转型成为了最具确定性的时代浪潮&#xff0c;企业纷纷拥抱低代码开发平台&…

NSS [UUCTF 2022 新生赛]ez_upload

NSS [UUCTF 2022 新生赛]ez_upload 考点&#xff1a;Apache解析漏洞 开题就是标准的上传框 起手式就是传入一个php文件&#xff0c;非常正常的有过滤。 .txt、.user.ini、.txxx都被过滤了&#xff0c;应该是白名单或者黑名单加MIME过滤&#xff0c;只允许.jpg、.png。 猜测二…

UVSLED透明屏,在商业广告中,有哪些应用表现?

UVSLED透明屏是一种新型的显示屏技术&#xff0c;它采用了UVSLED&#xff08;Ultraviolet Shortwave Light Emitting Diode&#xff09;作为光源&#xff0c;具有高亮度、高对比度和高色彩饱和度的特点。 UVSLED透明屏可以实现透明显示效果&#xff0c;使得观众可以同时看到屏…