MySQL 一行记录是怎么存储的

文章目录

    • 1. 文件存放目录 && 组织
    • 2. 表空间文件的结构
    • 3. InnoDB 行格式
    • 4. Compact 行格式
      • 记录的额外信息
        • 1. 变长字段长度列表
        • 2. NULL 值列表
        • 3. 记录头信息
      • 记录的真实数据
        • 1. 定义的表字段
        • 2. 三个隐藏字段
    • 5. varchar(n) 中 n 最大取值为多少?
    • 6. 行溢出后,MySQL 是怎么处理的?
    • 参考

1. 文件存放目录 && 组织

MySQL 数据库的文件存放目录:

mysql> show variables like 'datadir';
+---------------+----------------------------------+
| Variable_name | Value                            |
+---------------+----------------------------------+
| datadir       | D:\Softwares\mysql\install\Data\ |
+---------------+----------------------------------+
1 row in set, 1 warning (0.01 sec)

数据库名:db01, 表名:dept

D:\Softwares\mysql\install\Data>cd db01

D:\Softwares\mysql\install\Data\db01>dir
 驱动器 D 中的卷是 Data
 卷的序列号是 B89F-809E

 D:\Softwares\mysql\install\Data\db01 的目录

2024/04/27  16:57    <DIR>          .
2024/07/13  00:30    <DIR>          ..
2024/04/25  19:43                61 db.opt
2024/04/27  16:57             8,636 dept.frm
2024/04/27  16:58            98,304 dept.ibd
               3 个文件        107,001 字节
               2 个目录 79,156,989,952 可用字节
文件名存储内容文件名后缀全称
db.opt配置(默认字符集和字符校验规则)Option
dept.frm表结构定义Format
dept.ibd表数据InnoDB Data

2. 表空间文件的结构

表空间由段、区、页、行组成

段,segment:包括索引段(B+树非叶子节点)、数据段(也字节带你)和回滚段(回滚数据的区的集合)

区,extent:索引分配空间单位,默认区大小为 1MB(方便B+树双向链表相邻的页物理位置也相邻,使用顺序IO避免随机IO)

页,page:InnoDB 的数据读写单位,默认页大小为 16KB

行,row:数据库中的记录按行存放

3. InnoDB 行格式

  • Redundant:MySQL 5.0 之前,不紧凑

  • Compact:MySQL 5.0 之后,紧凑(一页可以存放更多记录行)

  • Dynamic:MySQL 5.1 之后,基于 Compact 稍作改进

  • Compressed:基于 Compact 稍作改进

4. Compact 行格式

记录的额外信息

1. 变长字段长度列表
  • varchar

  • 逆序

  • 不是必须的

2. NULL 值列表
  • 以字节为单位,但每一位记录一个 NULL 列(1)

  • 逆序

  • 不是必须的

3. 记录头信息
  • delete_mask: 1/0, 标记数据行是否被删除

  • next_record: 下一条记录的位置,记录之间通过链表组织

  • record_type: 记录类型,0=普通记录(B+树叶子节点记录),1=B+树非叶子节点记录,2=最小记录,3=最大记录

记录的真实数据

1. 定义的表字段
2. 三个隐藏字段
  • row_id

    • 非必须,若建表指定主键或唯一约束列,则无此字段

    • 6 字节

  • trx_id

    • 事务 id,表示数据记录对应的生成事务编号

    • 必须的

    • 6 字节

  • roll_pointer

    • 上一版本的指针,与 trx_id 用于 MVCC 机制

    • 必须的

    • 7 字节

5. varchar(n) 中 n 最大取值为多少?

MySQL 规定除了 TEXT、BLOBs 这种大对象类型之外,其他所有的列(不包括隐藏列和记录头信息)占用的字节长度加起来不能超过 65535 个字节

  • 这里所有的列包括记录的额外信息(变长字段长度列表、NULL 值列表)

  • ascii 字符集, 1 个字符占用 1 字节

  • UTF-8 字符集下,一个字符最多需要三个字节

  • 分单字段和多字段讨论

6. 行溢出后,MySQL 是怎么处理的?

  • Situation

    MySQL 中磁盘和内存交互的基本单位是页,一个页的大小一般是 16KB,也就是 16384字节,而一个 varchar(n) 类型的列最多可以存储 65532字节,一些大对象如 TEXT、BLOB 可能存储更多的数据,这时一个页可能就存不了一条记录。这个时候就会发生行溢出,多的数据就会存到另外的「溢出页」中

  • Task & Action

    • Compact 格式

      在记录的真实数据处只会保存该列的一部分数据,而把剩余的数据放在「溢出页」中,然后真实数据处用 20 字节存储指向溢出页的地址,从而可以找到剩余数据所在的页。

    • Dynamic / Compressed 格式

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

  • 思考

    • 性能和空间的权衡

    • 数据的随机访问优化:将大对象分片存储在溢出页中,可以在需要时进行局部读取,而不必每次都读取整个大对象,这样可以减少I/O操作,提升查询效率。

参考

MySQL 一行记录是怎么存储的? | 小林coding

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

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

相关文章

Jdk8 Idea Maven Received fatal alert: protocol_version

问题描述 使用idea开发工具&#xff0c;maven加载项目依赖时&#xff0c;出现错误&#xff1a; Could not transfer artfact xxxxxxx from/to maven-dep-repos https://XXXXXXX: Received fatal alert: protocol_version初步思路 用关键字protocol_version 去检索&#xff0…

Nuxt.js头部魔法:轻松自定义页面元信息,提升用户体验

title: Nuxt.js头部魔法&#xff1a;轻松自定义页面元信息&#xff0c;提升用户体验 date: 2024/7/16 updated: 2024/7/16 author: cmdragon excerpt: 摘要&#xff1a;“Nuxt.js头部魔法&#xff1a;轻松自定义页面元信息&#xff0c;提升用户体验”介绍如何使用useHead函数…

多元统计分析概述

目录 1. 多元回归分析 2. 主成分分析&#xff08;PCA&#xff09; 3. 因子分析 4. 判别分析 5. 聚类分析 6. 多维尺度分析&#xff08;MDS&#xff09; 结论 多元统计分析是一组用于分析多个变量之间关系的统计方法。它广泛应用于各个领域&#xff0c;如市场研究、生物医…

clion中建立c文件工程,读取或创建sqlite3数据库文件

1.首先前往SQLite官网下载sqlite3所需文件 SQLite Download Page 2.解压文件&#xff0c;将其中的sqlite3.c和sqlite3.h拷贝到你对应的文件工程中 3.修改CMakeLists.txt文件&#xff0c;添加编译选项及连接文件 4.运行代码及查询数据库文件

【数据结构】树和二叉树及堆的深入理解

【数据结构】树和二叉树及堆的深入理解 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;数据结构 文章目录 【数据结构】树和二叉树及堆的深入理解前言一.树1.1 树的概念1.2 树的相关概念1.3 树的表示1.4 树的应用 二.二叉树2.1 二叉树概念及…

el-table和 el-image图片预览使用插槽后层叠样式错乱问题

问题&#xff1a; 解决办法&#xff1a;在el-image组件中添加preview-teleported 属性 最终效果

二百四十四、Hive——Hive中解析复杂JSON,既有对象还有数组,而且数组中包含数组

一、目的 由于协议修改&#xff0c;修改后的原始数据JSON更加复杂&#xff0c;导致Hive中解析的难度更大&#xff0c;搞了一天&#xff0c;还好同事发了篇知乎文章&#xff0c;终于得以解决&#xff0c;天哪&#xff0c;太不容易了 二、数据协议案例 { "deviceNo&qu…

elasticsearch-keystore工具介绍

1、参数设置查询 命令格式&#xff1a; bin/elasticsearch-keystore list 2、密码密码查询 命令格式: bin/elasticsearch-keystore show 参数 例&#xff1a;bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password

linux系统 mysql-8.0.32安装

1、下载安装文件 此处我选择的是 Archives 8.0.32版本 2、上传文件到linux服务器 此处省略 3、卸载旧版本mysql // 查看现有mysql&#xff1a; rpm -qa|grep -i mysql// 查看mysql状态 systemctl status mysqld.service// 若为启用状态&#xff0c;则停止 systemctl stop…

html5——CSS列表样式属性

list-style-type list-style-image list-style-position list-style eg&#xff1a; li { list-style:none; }【去除前面的黑点】

对象存储解决方案:高性能分布式对象存储系统MinIO

文章目录 引言I 自动化数据管理界面1.1 图形用户界面:GUI1.2 命令行界面:MinIO CLI1.3 应用程序编程接口:MinIO APIII 部署集成2.1 静态端口分配2.2 将NGINX用作反向代理,配置负载。III 基础概念3.1 为什么是对象存储?3.2 MinIO支持哪些系统拓扑结构?3.3 时间同步3.4 存储…

分布式 I/O 系统 BL200 Modbus TCP 耦合器

BL200 耦合器是一个数据采集和控制系统&#xff0c;基于强大的 32 位微处理器设计&#xff0c;采用 Linux 操作系统&#xff0c;支持 Modbus 协议&#xff0c;可以快速接入现场 PLC、SCADA 以及 ERP 系统&#xff0c; 内置逻辑控制、边缘计算应用&#xff0c;适用于 IIoT 和工业…

CyberVadis认证是什么

CyberVadis认证是一项全球性的、权威的、基于云的网络安全性评估和认证项目。它是由Altimeter公司开发的&#xff0c;专门针对云计算服务提供商、数据中心、软件即服务(SaaS)供应商、安全咨询服务公司和内部IT部门而设计的。 CyberVadis认证旨在评估和验证组织在网络安全方面的…

android中实现双列表联动功能

就是一个数据展示的功能&#xff0c;左边是目录、右边是详情列表。效果图如下&#xff1a; 实现的思路&#xff0c;就是左右一个列表&#xff0c;右边的列表里面嵌套一个列表&#xff0c;一共三个列表。 第一步&#xff1a;先写一个主页面布局文件 <?xml version"1…

在GPU上运行PyTorch

文章目录 1、查看GPU的CUDA版本2、下载CUDA版本3、安装cuDNN4、配置CUDA环境变量5、安装配置Anaconda6、使用Anaconda7、pycharm导入虚拟环境8、安装带GPU的PyTorch⭐9、总结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#x…

轻量级自适用商城卡密发卡源码(可运营)

一款全开源非常好看的发卡源码。轻量级自适应个人自助发卡简介&#xff0c;这是一款二次开发的发卡平台源码修复原版bug,删除无用的代码。所有文件全部解密&#xff0c;只保留后台版权信息内容。大家放心使用&#xff0c;可以用于商业运营。轻量级自适应个人自助发卡。 源码下…

【海外云手机】静态住宅IP集成解决方案

航海大背景下&#xff0c;企业和个人用户对于网络隐私、稳定性以及跨国业务的需求日益增加。静态住宅IP与海外云手机的结合&#xff0c;提供了一种创新的集成解决方案&#xff0c;能够有效应对这些需求。 本篇文章分为三个部分&#xff1b;静态住宅优势、云手机优势、集成解决…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(一)——流形;

新建了一个专栏&#xff0c;仔细学习高翔的新书《自动驾驶与机器人中的SLAM技术》。 快速通读了一遍&#xff0c;发现还有很多需要深入学习的东西&#xff0c;因此二刷这本书。对于自己不懂的地方&#xff0c;通过这个笔记记录这个流程。 第一个问题&#xff1a;流形。 流形学…

Spring Boot项目的404是如何发生的

问题 在日常开发中&#xff0c;假如我们访问一个Sping容器中并不存在的路径&#xff0c;通常会返回404的报错&#xff0c;具体原因是什么呢&#xff1f; 结论 错误的访问会调用两次DispatcherServlet&#xff1a;第一次调用无法找到对应路径时&#xff0c;会给Response设置一个…

uniapp页面跳转传参和动态修改NavigationBarTitle

一、需求 比如聊天界面&#xff0c;需要在上方展示对方的名字&#xff0c;我们这样需要动态数值的&#xff0c;就不能写在pages配置项里面。 二、实现 我们并没有在pages里面配置固定的title名&#xff0c;我们需要动态传到talk&#xff0c;然后动态修改绑定到这个title。好在u…