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列。

posted @ 2017-08-09 14:57  秦楚风  阅读(444)  评论(0编辑  收藏  举报