0809MySQL-InnoDB Compact 行记录格式
InnoDB存储引擎提供了compact(5.1后的默认格式)和redundant两个格式来存放行记录数据。redundant格式是为了兼容之前的版本而保留。
mysql> show
table
status
like
't1'
\G;
*************************** 1. row ***************************
Name
: t1
Engine: InnoDB
Version: 10
<strong>Row_format: Compact</strong>
Rows
: 2
Avg_row_length: 8192
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment:
NULL
Create_time: 2016-01-11 05:04:28
Update_time:
NULL
Check_time:
NULL
Collation: utf8_general_ci
Checksum:
NULL
Create_options:
Comment:
1 row
in
set
(0.00 sec)
Compact行记录的格式
-变长字段长度列表:如果列的长度小于255字节,用1字节表示;如果大于255个字节,用2字节表示
-NULL标志位:表明该行数据是否有NULL值。占一个字节。
-记录头信息:固定占用5字节,每位的含义见下表:
名称 | 大小(bit) | 描述 |
() | 1 | 未知 |
() | 1 | 未知 |
delete_flag | 1 | 该行是否已被删除 |
min_rec_flag | 1 | 为1,如果该记录是预先被定义为最小的记录 |
n_owned | 4 | 该记录拥有的记录数 |
heap_no | 13 | 索引堆中该记录的排序记录 |
record_type | 3 | 记录类型,000表示普通,001表示B+树节点指针,010表示infimum,011表示supermum,1xx表示保留 |
next_record | 16 | 页中下一条记录的相对位置 |
total | 40 |
在每个列的存储数据中,NULL不占该部分任何空间。此外还有两个隐藏列,事务ID列和回滚指针列,分别为6字节和7字节。若innodb表没有定义主键,每行还会增加一个6字节的rowid列。