一、概念
当前MySQL Innodb拥有两种文件格式:
1.旧版本的antelope,对应到两种行格式:redundant和compact
2.新版本的barracuda,对应到两种行格式:dynamic和compressed
文件格式和行格式可以通过参数设置:
SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_default_row_format=dynamic;
可以通过show table status like 'test’来查看test表的行格式,知道行格式之后也就可以对应到文件格式。
或者通过infomation_schema.innodb_sys_tables来查看某一个表的文件格式和行格式:
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME='test/t1'\G
二、各个行格式的物理结构
1.redundant
6 bytes的头部信息,用于行与行之间连续相连,以及行锁
用户定义的列
6 bytes 事务id和7bytes undo指针
如果没有指定主键,会有一个隐含的6 bytes主键列
如果是二级索引行,还会带有主键列
列指针,如果行的列总长度<128bytes,则占1 byte;如果>=128byte,则占用2 bytes
变长字段的null不占用存储空间,定长字段的null占用字段固定长度
2.compact
compact格式比redundant节省大约20%空间&#