InnoDB行记录格式

这篇博客详细介绍了InnoDB存储引擎的行记录格式,包括Compact和Redundant两种格式。Compact格式是MySQL 5.0引入的,旨在提高存储效率,其特点是变长字段长度列表逆序放置,NULL标志位和Record Header。Redundant格式则是为了兼容旧版本,其长度偏移列表和Record Header有所不同。博客通过实例解析了两种格式的行记录结构,并展示了如何查看和分析数据存储情况。
摘要由CSDN通过智能技术生成

InnoDB存储引擎和大多数数据库一样,记录是以行的形式存储的。也就是说页中保存着表中一行行的数据。在InnoDB 1.0.x版本之前,InnoDB存储引擎
提供了Compact和Redundant两种格式来存放行记录数据。
Redundant格式是为了兼容之前版本而保留的,如果阅读过InnoDB的源代码,用户会发现源代码中是用PHYSICAL RECORD(NEW STYLE)和PHYSICAL RECORD(OLD STYLE)来区分两种格式。
在MySql 5.1版本中,默认设置为Compact行格式。用户可以通过下面命令查看表使用的行格式,其中row_format属性表示当前所使用的行记录结构类型。

mysql> show table status like 'test'\G
*************************** 1. row ***************************
           Name: test
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 1
 Avg_row_length: 16384
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 5242880
 Auto_increment: NULL
    Create_time: 2016-07-20 16:13:43
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)

可以看到test表是Compact的行格式。数据库实例的作用之一就是读取页中存放的行记录。如果用户自己知道页中行记录的组织规则,也可以自行通过编写工具的方式来读取其中的记录。

1、Compact行记录格式

Compact行记录是在MySql 5.0中引入的,其设计目标是高效地存储数据。简单来说,一个页中存放的行数据越多,其性能就越高。下面是Compact行记录的存储方式:

这里写图片描述

Compact行记录格式的首部是一个非NULL变长字段长度列表,并且其是按照列的顺序逆序放置的,其长度是:
(1)若列的长度小于255字节,用1字节表示;
(2)若大于255个字节,用2字节表示;

变长字段的长度最大不可以超过2字节,这是因为在MySql数据中varchar类型的最大长度限制为65535。
变长字段之后的第二部分是NULL标志位,该位指示了该行数据中是否有NULL值,有则用1表示。该部分所占的字节应该为1字节。
接下来的部分是记录头信息(record header),固定占用5字节(40位),每位的含义如下图所示:
这里写图片描述

最后的部分是实际存储每个列的数据。NULL不占该部分任何空间,即NULL除了占有NULL标志位,实际存储不占有任何空间。
另外,每行数据除了用户定义的列外,还有两个隐藏列,事务ID列和回滚指针列,分别为6字节和7字节的大小。若InnoDB表没有定义主键,每行还会增加一个6字节的rowid列。

接下来用一个具体示例来分析Co

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值