0%

mysql存储引擎

1.InnoDB 介绍

mysql服务中负责对表中数据的读取和写入是存储引擎干的,服务中有多种存储引擎,比如**InnoDB、MyISAM **等,且数据在不同的存储引擎中存放格式也不同。

目前我们使用的最多的还是InnoDB。InnoDB是一个将表中的数据存储到磁盘上的存储引擎,所以服务器关机重启也不会造成数据丢失。InnoDB处理数据的过程是发生在内存的,读取的时候把磁盘中的数据加载到内存中,写入的时候把内容刷新到磁盘上。

1.1.InnoDB页

相对于内存来说,磁盘的读写速度是很慢的,所以从表里一条一条读取数据是非常慢的。这时候就需要一个好的存储引擎InnoDB。

InnoDB处理方式:将数据划分为若干页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为16KB

也就是说,磁盘和内存之间最低交换内容的大小为16KB。

1.2.InnoDB行格式

我们平时看到的数据库表中的数据是一条一条插入的,这些记录在磁盘中的存放格式被称为行格式、记录格式。mysql的作者们设计了4种不同类型的行格式,分别是Compact、Redundant、Dynamic和Compressed行格式。

mysql版本 默认行格式 关键参数
4.x/5.0之前 REDUNDANT(冗余) 仅支持Redundant
5.0~5.1 COMPACT(紧凑) innodb_file_format=Antelope
5.5~5.6 COMPACT(紧凑) innodb_file_format=Antelope
5.7 DYNAMIC(动态) innodb_default_row_format=DYNAMIC
8.0+ DYNAMIC(动态) innodb_file_format已废弃

从COMPACT行格式讲起

1.2.1.compact行

一条完整的记录被分为额外信息真实数据两大部分

1.2.1.1.额外信息

额外信息是服务器为了描述这条记录而不得不额外添加的一些信息,这些额外信息分为3类,分别是变长字段长度列表 NULL值列表记录头信息

变长字段长度列表:MySQL支持一些变长的数据类型,比如VARCHAR(M)、VARBINARY(M) 、各种 TEXT 类型,各种BLOB类型,我们也可以把拥有这些数据类型的列称为变长字段 ,变长字段中存储多少字节的数据是不固定的,所以我们在存储真实数据的时候需要顺便把这些数据占用的字节数也存起来,一行内所有变长字段占用的字节大小以逆序的形式放到变长字段长度列表

时间空闲了,会把后面的内容整理出来