IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL是怎样运行的-第四章 -> 正文阅读

[大数据]MySQL是怎样运行的-第四章

这一章主要是讲记录的存储格式。

4-1

不同数据在不同存储引擎中的存储格式是不同的。

4-2

InnoDb引擎以页为单位与磁盘交互

4-3

记录的格式有四种,分别是

COMPACT REDUNDANT DYNAMIC COMPRESSED

指定语法是

CREATE TABLE 表名 (列的信息)ROW_FORMAT=格式名称;

核心 COMPACT格式

请添加图片描述

变长字段列表:

变长字段的真实数据占用的字节数都存放在开头位置,从而形成变长字段长度列表。

重要的是这个顺序是倒过来的。(为什么要倒着放下一章介绍)

一般来说,一个列占用的实际大小只需要一个字节就能描述了,但是有的列可能比较大,这就需要两个字节来描述这个列实际存储的数据的字节数。
具体用几个字节,要根据以下规则判断。

假设某字符编码最多用W字节表示一个字符
Varchar后面括号里的数字是M
该变长字段实际存储的字符串占用字节数是L

如果M*W <= 255	则用1字节表示实际存储的字符串占用的字节数
否则,如果L<=127用1个字节,>127用两个字节。

其实也就只有1字节和2字节这两种情况。如果某条记录存储的数据非常大的话,会用溢出页来存数据。

当然,变长字段列表也不是必须的。如果某个表里没有变长字段,那当然不需要这个表。

NULL值表

如果表中的列都不允许null值,则该段不存在。
如果有可以为null值的列,则会用bit位来标记是否为null值。1为该列是null,0为该列非null。
同样地,这一段段顺序也是和记录中列的顺序相反的。
此外,null段还会进行字节填充。

记录头信息

请添加图片描述
这个东西也不用记···看懂就行了。

额外的列

DB_ROW_ID、DB_TRX_ID、DB_ROLL_PTR
分别占用6、6、7字节。

DB_ROW_ID是没有列能做主键的时候出现的,用它做隐式主键。
第二个就是事务id,第三个就是回滚指针。见名知意了。

定长列char(m)

char(m)实际用的字节数也可能是不固定的。
比如utf8mb4编码,长度为10,10个字符最多占用40字节,最少占用10个字节。即使你放进去一个空字符串,也要花费10字节。
如果是ascii,则只会占用10字节。

这里要注意的是,如果是变长编码,如utf8mb4,则char(m)列实际占用的字节数也会记载到变长字段列表中。

REDUNDANT格式

没有null值表,把变长字段长度列表变成了字段长度偏移表。
当然,也是逆序的。

这里也设计一个问题,就是每个列的偏移量用1个字节还是2个字节表示。
这里的判断规则是

如果整个记录占用的字节数小于127,则1字节
大于127,小于32767,则2字节
更大的话,需要溢出页

因为没有null值表,所以需要把每个列偏移量字节的第一个比特位拿来做null值记录。
因此即使在127-255之间,也需要两个字节来表示。

对null值来说,如果对应的列是变长的,则不占用实际存储空间。如果对应的列是定长的,则用零字节填充。

对REDUNDANT格式下的定长列来说,也涉及到分配多少空间的问题。这里,REDUNDANT格式简单粗暴,直接给最大空间。
假设有一列是char(10),编码为utf8mb4,则直接分配40个字节。

溢出列

在COMPACT和REDUNDANT格式下,对于占用存储空间非常多的列,在记录的真实数据处只会存储部分数据,剩下的数据分散在其他的一些数据页中。在记录的真实数据处会用20字节指向这些页的地址。

DYNAMIC格式和COMPRESSED格式

5.7版本的默认格式是DYNAMIC。它与COMPACT基本一样,只是在存储溢出列的时候不存储768个字节的真实数据,只存储一个20字节的指针。
而COMPRESSED格式也大同小异,区别只是会对溢出页进行压缩。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 11:59:11  更:2022-01-28 12:01:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:47:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码