innodb行记录格式redundant,compact,compressed,dynamic

innodb行记录格式
innodb存储引擎和大多数据库一样(Oracle,sql server)记录是以行的形式存储的,这意味着页中保存着一行行数据。
1,redundant 是为兼容之前的版本而保留的,对于varchar类型的NULL值,redundant行记录格式同样不占用任何存储空间,
而char类型的NULL值需要占用空间。
2,compact行记录是在mysql 5.0中引入的,其设计目标是高效的存储数据,简单来说就是一个页中存放的行数据越多,其性能越高
每行数据除了用户定义的列外,还有两个隐藏列,事物ID列和回滚指针列,分别为6字节和7字节的大小,

若innodb引擎没有定义主键,每行还会增加一个6字节的rowid列。固定长度CHAR字段在未能完全占用其长度空间时,
会用Ox20进行填充。不管是char类型还是varchar类型,在compat格式下,NULL值都不占用任何存储空间。
show table status like ‘%%’

create table t1( id int )engine =innodb charset=latin1 row_format=redundant;
show table status like ‘t1’\G
*************************** 1. row ***************************
Name: t1
Engine: InnoDB
Version: 10
Row_format: Redundant
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2017-12-02 21:02:44
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options: row_format=REDUNDANT
Comment:
1 row in set (0.00 sec)

varchar(N) 指的是字符的长度。此外还需要注意的是mysql官方手册中定义的65535长度是指所有varchar列
长度的总和。

compact和redundant格式称为#antelope#文件格式,新的文件格式称为#barracuda#文件格式。
barracuda文件格式(file format)下拥有两种新的行记录格式:
compressed
dynamic。

新的两种记录格式对于存放blob中的数据采用了完全的行溢出的方式,在数据页中只存放了
20个字节的指针,实际的数据都存放在off page中,而之前的compact和redundant两种格式会存放768的前缀字节。
3,compressed 行记录格式的另一个功能就是,存储在其中的行数据会以zlib的算法进行压缩,
因此会对BLOB,TEXT,VARCHAR这类大长度类型的数据能够进行非常有效的存储。

新的文件格式总是包含于之前的版本的页格式,
innodb_file_format:barracuda #用来指定文件格式,
innodb_default_row_format:dynamic
innodb_file_format_check用来检测当前innodb存储引擎文件格式的支持度

###innodb:warning:the system tablespace is in a file format that this version doesn’t support.

页是innodb存储引擎管理数据库的最小磁盘单位
mysql> show variables like ‘%innodb_check%’;
±--------------------------±-------+
| Variable_name | Value |
±--------------------------±-------+
| innodb_checksum_algorithm | innodb |
| innodb_checksums | ON |
±--------------------------±-------+

可以通过 innodb_checksums 来开启或关闭对这个页完整性的检查。
innodb_checksum_algorithm该参数用来控制检测checksum函数的算法,默认为crc32,可设置的值有:
innodb ,crc32,none,strict_innodb,strict_crc32,strict_none

你可能感兴趣的:(mysql,innodb)