MySQL从入门到精通系列:InnoDB记录存储结构

一:楔子

MySQL服务器当中用于对表数据进行操作的是存储引擎。 常用的存储引擎是InnoDB MyISAM MEMORY

MySQL默认的存储引擎是InnoDB。我们本系列文章,研究的也就是这个存储引擎。

二:页简介

InnoDB的数据存储到磁盘上。

真正处理数据的过程发生在内存中,所以需要把磁盘中的数据加载到内存中。如果是处理写入或修改 请求,还需要把内存中的内容刷新到磁盘上

然而读写磁盘的速度非常慢,与读写内存差了几个数量级。存储引擎需要一条一条地把记录从磁盘上读出来么?不,那样会慢死。

InnoDB采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位。InnoDB中页的大小一般为16KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。

注意:

系统变量innodb_page_ size表明了InnoDB存储引擎中的页大小,默认值为16384(单位是字节),也就是16KB。

该变量只能在第一次初始化MySQL数据目录时指定,之后就再也不能更改了

服务器运行过程中不可以更改页面大小就好了

三:行格式

表中数据的单位是记录,记录有四种行格式:

compact、redundant、dynamic、compressed

1:指定行格式语法

复制代码
# 建表时指定
CREATE TABLE `xxxxxxx` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `encrypted_data_key` varchar(1024) COLLATE utf8mb3_bin NOT NULL DEFAULT '' COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin ROW_FORMAT=compact

# alter进行修改
alter table xxxxrow_format=conpact;

2:指定compact行格式

额外信息的作用

辅助管理、标记真实记录。

变长字段列表:

MySQL中有变长数据类型Varchar(M) Varbinary(M) Text BloBl类型。这种列数据存储内容长度是多少并不确定

存储行中包含这种列的时候,要存储真实值+内存长度(数据占用字节数)Compact格式中,一行中变长字段真实数据字节数,逆序存储在这个列表当中。按列顺序逆序排列。

Null值列表:

某些列是null值,

相关推荐
景芯SoC芯片实战24 分钟前
12nm工艺下,6T-Turbo Cell的Filler到底该怎么插?
数据库·数字ic·dft·soc后端
韩楚风28 分钟前
【参天引擎】一次宕机后的数据恢复,让我把 Cantian 持久化与恢复的六大机制全搞明白了
服务器·网络·数据库·分布式·mysql·架构·cantian
寒月小酒1 小时前
第五章 生成集成 和第六章 RAG评估(all-in-rag学习)
数据库·学习
Mico181 小时前
MySQL 8.0.35 mydumper/myloader 备份恢复工具使用
mysql
AI人工智能集结号1 小时前
AI回答采集:基于PostgreSQL JSONB的原始数据存储与可追溯性方案
数据库·人工智能·postgresql
躺柒2 小时前
读半导体简史08大型机
linux·服务器·c语言·数据库·unix·ibm
DFT计算杂谈2 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
IvorySQL2 小时前
PG 日报|查询优化器重大修复,支持更多复杂 SQL 优化
数据库·人工智能·postgresql·开源
写代码的强哥3 小时前
TiDB 和 OceanBase 对比:架构师视角下的企业选型实战指南
数据库·云原生·架构
金融小白数据分析之路4 小时前
绍兴市镇街echarts 制作
前端·数据库·echarts