4.3.3 【MySQL】Redundant行格式

现在我们把表demo 的行格式修改为 Redundant :

                        

为了方便大家理解和节省篇幅,我们直接把表 demo 在Redundant 行格式下的两条记录的真实存储数据提供出来,之后我们着重分析两种行格式的不同即可。

下边我们从各个方面看一下 Redundant 行格式有什么不同的地方:

字段长度偏移列表

注意 Compact 行格式的开头是 变长字段长度列表 ,而 Redundant 行格式的开头是 字段长度偏移列表 ,与变长字段长度列表有两处不同:

没有了变长两个字,意味着 Redundant 行格式会把该条记录中所有列(包括 隐藏列 )的长度信息都按照逆序存储到 字段长度偏移列表 。

多了个偏移两个字,这意味着计算列值长度的方式不像 Compact 行格式那么直观,它是采用两个相邻数值的差值来计算各个列值的长度。

比如第一条记录的 字段长度偏移列表 就是:

25 24 1A 17 13 0C 06

因为它是逆序排放的,所以按照列的顺序排列就是:

06 0C 13 17 1A 24 25

按照两个相邻数值的差值来计算各个列值的长度的意思就是:

第一列(`row_id`)的长度就是 0x06个字节,也就是6个字节。

第二列(`transaction_id`)的长度就是 (0x0C - 0x06)个字节,也就是6个字节。

第三列(`roll_pointer`)的长度就是 (0x13 - 0x0C)个字节,也就是7个字节。

第四列(`c1`)的长度就是 (0x17 - 0x13)个字节,也就是4个字节。

第五列(`c2`)的长度就是 (0x1A - 0x17)个字节,也就是3个字节。

第六列(`c3`)的长度就是 (0x24 - 0x1A)个字节,也就是10个字节。

第七列(`c4`)的长度就是 (0x25 - 0x24)个字节,也就是1个字节。

记录头信息

Redundant 行格式的记录头信息占用 6 字节, 48 个二进制位,这些二进制位代表的意思如下:

|名称|大小(单位:bit)|描述| |:--:|:--:|:--:| | 预留位1 | 1 |没有使用| | 预留位2 | 1 |没有使用|| delete_mask | 1 |标记该记录是否被删除| | min_rec_mask | 1 |B+树的每层非叶子节点中的最小记录都会添加该标记| | n_owned | 4 |表示当前记录拥有的记录数| | heap_no | 13 |表示当前记录在页面堆的位置信息|| n_field | 10 |表示记录中列的数量| | 1byte_offs_flag | 1 |标记字段长度偏移列表中每个列对应的偏移量是使用1字节还是2字节表示的| | next_record | 16 |表示下一条记录的相对位置|

第一条记录中的头信息是:

00 00 10 0F 00 BC

根据这六个字节可以计算出各个属性的值,如下:

预留位1:0x00

预留位2:0x00

delete_mask: 0x00

min_rec_mask: 0x00

n_owned: 0x00

heap_no: 0x02

n_field: 0x07

1byte_offs_flag: 0x01

next_record:0xBC

Redundant 行格式中 NULL 值的处理

因为 Redundant 行格式并没有 NULL值列表 ,所以设计 Redundant 行格式的大叔在 字段长度偏移列表 中的各个列对应的偏移量处做了一些特殊处理 —— 将列对应的偏移量值的第一个比特位作为是否为 NULL 的依据,该比特位也可以被称之为 NULL比特位 。也就是说在解析一条记录的某个列时,首先看一下该列对应的偏移量的 NULL比特位 是不是为 1 ,如果为 1 ,那么该列的值就是 NULL ,否则不是 NULL 。

4.3.3.1 CHAR(M)列的存储格式

我们知道 Compact 行格式在 CHAR(M) 类型的列中存储数据的时候还挺麻烦,分变长字符集和定长字符集的情况,而在 Redundant 行格式中十分干脆,不管该列使用的字符集是啥,只要是使用 CHAR(M) 类型,占用的真实数据空间就是该字符集表示一个字符最多需要的字节数和 M 的乘积。比方说使用 utf8 字符集的 CHAR(10) 类型的列占用的真实数据空间始终为 30 个字节,使用 gbk 字符集的 CHAR(10) 类型的列占用的真实数据空间始终为 20 个字节。由此可以看出来,使用 Redundant 行格式的 CHAR(M) 类型的列是不会产生碎片的。

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

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

相关文章

市场开始复苏,三星传调涨内存芯片高达20% | 百能云芯

随着行动内存芯片市场迹象显示出复苏迹象,并且最早在第四季度供不应求,三星电子已宣布将提高动态随机存取存储器(DRAM)和NAND闪存芯片的价格,幅度达到10%~20%。 韩国经济日报报道,知情人士透露,…

Day57|leetcode 647. 回文子串、516.最长回文子序列

leetcode 647. 回文子串 题目链接:647. 回文子串 - 力扣(LeetCode) 视频链接:动态规划,字符串性质决定了DP数组的定义 | LeetCode:647.回文子串_哔哩哔哩_bilibili 题目概述 给你一个字符串 s ,…

30岁游戏服务端开发者的独立游戏梦想,你不敢想的事他都做了!

小的时候家里就是开电动游戏厅的,所以我从小就喜欢玩游戏,尤其是那些有创意和故事性的游戏。 我梦想着有一天能够制作出自己的游戏,让更多的人享受到游戏带来的乐趣。 为了实现这个梦想,我选择了学习计算机科学,并在毕…

cpu温度监测 Turbo Boost Switcher Pro for mac最新

Turbo Boost Switcher Pro是一款Mac电脑上的应用程序,旨在帮助用户控制和管理CPU的Turbo Boost功能。Turbo Boost是Intel处理器中的一项技术,可以在需要更高性能时自动提高处理器的频率。然而,这可能会导致电池消耗更快和温度升高。 以下是T…

用python实现基本数据结构【01/4】

说明 如果需要用到这些知识却没有掌握,则会让人感到沮丧,也可能导致面试被拒。无论是花几天时间“突击”,还是利用零碎的时间持续学习,在数据结构上下点功夫都是值得的。那么Python 中有哪些数据结构呢?列表、字典、集…

64、使用 Spring WebFlux 的 WebClient 整合第三方Restful服务

这节的要点: 就是弄两个项目 , 从 端口9090 这个项目,通过 webClient, 去访问 端口8080 的项目,并获取8080项目的数据。 ★ RESTful客户端的两种方式 - 应用基于传统的Spring MVC框架,此时考虑使用RestTe…

K线学习001-早晨之星1

K线定义 早晨之星,顾名思义:就是在太阳尚未升起的时候,黎明前最黑暗的时刻,一颗明亮的启明星在天边指引着那些走向光明的夜行人,前途当然看好。 早晨之星,即预示着跌势将尽,大盘处于拉升的前夜&…

TSUMU58CDT9-1显示器芯片方案

TSUMU58CDT9-1是用于LCD显示器的整体解决方案图形处理IC,面板分辨率高达WUXGA。它配置了高速集成三adc /PLL、集成DVI/HDMI接收器、高质量显示处理引擎、集成微控制器和支持LVDS面板接口格式的输出显示接口。TSUMU58CDT9-1支持一个灵活的可配置数字输入接口&#xf…

Ansible 自动化运维工具部署主从数据库+读写分离

文章目录 Ansible 自动化运维工具部署主从数据库读写分离一、主从复制和读写分离介绍二、准备工作(1)节点规划(2)修改主机名(3)免密(4)配置IP映射(5)安装ansi…

VMware vCenter Server Appliance7小版本升级

本文尝试使用 vCenter Server Appliance 管理界面 (VAMI) 进行对vCenter Server Appliance7应用进行小版本升级,从7.0.3.00100升级到7.0.3.01600。 一、升级前的准备工作 1、检查当前运行环境(当前为7.0.3.00100) 2、从 VMware官网下载压缩…

WebStorm使用Element组件库

文章目录 WebStorm使用Element组件库1. webstorm使用vue文件2. 首先需要安装Element Plus2. 项目完成引入-以日历为例 WebStorm使用Element组件库 1. webstorm使用vue文件 在Test.vue文件中书写模板,并暴露对外接口 <script> export default {name: "Test" }…

线性表——顺序表(增删查改)

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存 储。在数组上完成数据的增删查改。 静态顺序表——使用定长数组储存数据 静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了&#xff0c;空…