Mysql一行记录存储过程

Mysql一行记录存储过程

Mysql的文件架构

行(row)

数据库表中的记录都是行存放的,每行继续根据不同的行格式都有不同的存储结构。

页(page)

记录是按照行来存储的,但是数据库的读取是以页为单位的,也就是我们读一条数据,不是将这个数据从磁盘读取出来而是以页为单位,然后写入缓存,一个页的数据大小都是16kb

区(extent)

B+tree每一层都是用双向脸部连接的, 可能两个页相隔特别远。可能不是内存连续的。所以一个区包含多个页

段(segment)

表空间由各个段组成,因为段不是内存连续的,段一般分为数据段(主键树)、索引段(索引树)、回滚段。

INNODB Compact行格式

行格式分为记录额外信息记录真实数据

记录额外信息

​ **记录额外信息:**变长字段长度列表、NULL值列表、记录头信息

变长字段长度列表

​ varchar和char相比,char是定长度,而varchar是变长的,变长字段是寄存处的数据长度(大小)不固定。

​ 所以有了变长字段长度列表再去获取变长字段的时候就可以读取对应长度的数据。

​ 可变长字段长度列表是逆序存放的,比如存放的内容是03 01而不是01 03,如果为null不会存放

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自xiaolin coding

为什么选择倒序存放

​ 这个设计是有想法的,主要是因为「记录头信息」中指向下一个记录的指针,指向的是下一条记录的「记录头信息」和「真实数据」之间的位置,这样的好处是向左读就是记录头信息,向右读就是真实数据,比较方便。

​ 因为可以让我们一个页中的靠前的真实记录的数据和数据丢赢的字段长度信息可以同时在同义词CPU Cache line中,可以提高我们CPU Cache的命中率。

NULL值列表

表中有一些列可能存放null值,但是把null值存入进去是比较浪费空间的,所以Compact行把这些值为null的存储到Null值列表中。

如果二进制位的值为1,那么该值为NULL,

如果二进制的值值为0,那么该值不为NULL

NULL值列表必须用整个字节的位表示(1字节8位),二进制个数不足高位补0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自xiaolin coding

最后转换为16进制是0x04

如果是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传那么最后的的结果为0x004

每个字段都有NULL值列表吗?

​ 不是的,如果我们所有的字段就是NOT NULL就不会有,这样可以节省至少1字节。

记录头信息

**delete_mask:**删除标记

我们执行delete删除语句不会立刻从硬盘上删除,而是在INNODB的行结构COMpact的delete_mask进行标记,然后直到等待INNODB后来线程负责清理。这个做的原因是INNODB的一种优化策略叫做延迟删除,有助于提高性能和减少硬盘碎片。

recored_type: 表示当前记录的类型 0位普通记录(真实数据也可能是主键),1为非叶子结点记录(也可能是真索引也可能是主键),2为最小记录,3表示最大记录。

记录的真实数据

row_id

​ 如果我们有主键或者唯一约束列那么久就没有row_id.如果没有row_id隐藏字段,那么久就是没指定主键和唯一约束,

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

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

相关文章

python-基础篇-列表-脚本

文章目录 01_下标.py02_查找.py03_判断是否存在.py04_体验案例判断是否存在.py05_列表增加数据之append.py06_列表增加数据之extend.py07_列表增加数据之insert.py08_列表删除数据.py09_列表修改数据.py10_列表复制数据.py11_列表的循环遍历之while.py12_列表的循环遍历之for.p…

Linux 存储管理(磁盘管理、逻辑卷LVM、交换分区swap)

目录 1.磁盘管理 1.1 磁盘简介 1.2 管理磁盘 添加磁盘 管理磁盘流程三步曲 1.查看磁盘信息 2.创建分区 3.创建文件系统 4.挂载mount 5.查看挂载信息 6.MBR扩展分区 7.重启后的影响 2.逻辑卷LVM 2.1 简介 ​​​​​​2.2 创建LVM 2.3 VG管理 2.4 LV管理实战-在…

铱塔 (iita) 开源 IoT 物联网开发平台,基于 SpringBoot + TDEngine +Vue3

01 铱塔 (iita) 物联网平台 铱塔智联 (open-iita) 基于Java语言的开源物联网基础开发平台,提供了物联网及相关业务开发的常见基础功能, 能帮助你快速搭建自己的物联网相关业务平台。 铱塔智联平台包含了品类、物模型、消息转换、通讯组件(mqtt/EMQX通讯组…

学习Android的第八天

目录 Android ImageView 图像视图 ImageView 的基本使用 src属性和background属性的区别 范例 解决 anndroid:blackground 属性拉伸导致图片变形的方法 设置透明度的问题 范例 android:src 和 android:background 结合 范例 Java 代码中设置 blackground 和 src 属性…

基于鲲鹏服务器的LNMP配置

基于鲲鹏服务器的LNMP配置 系统 Centos8 # cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) 卸载已经存在的旧版本的安装包 # rpm -qa | grep php #查看已经安装的PHP旧版本# rpm -qa | grep php | xargs rpm -e #卸载已经安装的旧版,如果提示有…

OpenCV 笔记(21):图像色彩空间

1. 图像色彩空间 图像色彩空间是用于定义颜色范围的数学模型。 它规定了图像中可以使用的颜色以及它们之间的关系。它决定了图像中可以显示的颜色范围。不同的色彩空间可以包含不同的颜色范围,因此选择合适的色彩空间对于确保图像在不同设备上看起来一致非常重要。…

跳跃表的底层实现

跳跃表的底层是由 C 语言实现的,它的实现源码如下: typedef struct zskiplistNode {// 成员对象robj *obj;double score; // 分值struct zskiplistNode *backward; // 回退指针//层struct zskiplistLevel {// 前进指针struct zskiplistNode *forward;//…

架构之模板方法等模式的使用

目录 一、程序编写背景 二、编程思路讲解 - 类图 - 实现逻辑 - 工厂模式 - 模板方法模式 接口类(代码)抽象类(代码)具体实现类(代码)工厂类(代码)注册类(代码&…

Python爬虫实战:抓取猫眼电影排行榜top100#4

爬虫专栏系列:http://t.csdnimg.cn/Oiun0 抓取猫眼电影排行 本节中,我们利用 requests 库和正则表达式来抓取猫眼电影 TOP100 的相关内容。requests 比 urllib 使用更加方便,而且目前我们还没有系统学习 HTML 解析库,所以这里就…

LiteFlow规则引擎框架

LiteFlow规则引擎框架 Hi,我是阿昌,今天介绍一个规则引擎框架,LiteFlow; 一、前言 那首先得知道什么是规则引擎?规则引擎是 一种用于自动化处理业务规则的软件组件。 在软件行业中,规则引擎通常用于解决…

如何使用Docker本地部署一个开源网址导航页并分享好友公网使用

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,…

备战蓝桥杯---动态规划(基础3)

本专题主要介绍在求序列的经典问题上dp的应用。 我们上次用前缀和来解决,这次让我们用dp解决把 我们参考不下降子序列的思路,可以令f[i]为以i结尾的最大字段和,易得: f[i]max(a[i],a[i]f[i-1]); 下面是AC代码: #in…

有哪些方法可以配置并发服务器?

通过合理配置并发服务器,可以提高服务器的处理能力和响应速度,从而更好地满足用户需求。本文将介绍一些常见的并发服务器配置方法,以帮助您更好地实现服务器的高效运行。 一、选择合适的操作系统 操作系统的选择是并发服务器配置的重要环节…

【数据结构与算法-初学者指南】【附带力扣原题】队列

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《数据结构与算法:初学者入门指南》📘&am…

面向数据报编程-UDP协议

目录 前言: 1.UDP协议API 1.1UDP编程原理 1.2DatagramSocket类 (1)DatagramSocket构造方法 (2)DatagramSocket普通方法 1.3DatagramPacket类 (1)DatagramPacket构造方法 (2…

2.6日学习打卡----初学RabbitMQ(一)

2.6日学习打卡 初识RabbitMQ、 一. MQ 消息队列 MQ全称Message Queue(消息队列),是在消息的传输过程中保 存消息的容器。多用于系统之间的异步通信。 同步通信相当于两个人当面对话,你一言我一语。必须及时回复 异步通信相当于通…

vs用msys2编译安装 gmp

1 下载 1.1下载MSYS2工具 MSYS2 1.2 下载gmp The GNU MP Bignum Library 2 使用windows的msys2命令窗口,有三个msys2命名窗口 mingw64 3 4 命令 pacman -Syu 重启: pacman -Su 安装: pacman -S mingw-w64-x86_64-gcc pacman -S mingw-w64-x86_64-make…

C语言函数的栈帧与销毁(面试亮点)

目录 如果你能熟练的掌握函数的栈帧与销毁在面试中是及其亮眼的加分项,所以我们来以实例来将解函数是如何实现栈帧与销毁的。 一. 函数栈帧 二.寄存器 三. 用例题讲解创建栈帧的过程 3.1 main 函数的反汇编代码。 第一步:给调用main函数的函数分配…

[职场] 如何通过运营面试_1 #笔记#媒体#经验分享

如何通过运营面试 盈利是公司的事情,而用户就是你运营的事情。你需要彻底建立一个庞大而有效的用户群,这样才能让你们的公司想盈利就盈利,想战略就战略,想融资就融资。 一般从事运营的人有着强大的自信心,后台数据分析…

JVM-虚拟机栈

虚拟机栈 Java虚拟机栈(Java Virtual Machine Stack)采用栈的数据结构来管理方法调用中的基本数据,先进后出(First In Last Out),每一个方法的调用使用一个栈帧(Stack Frame)来保存。 接下来以…