MySQL中行格式之Compact行记录格式

目前的MySQL,行格式都必然是Compact,本质就是一个页中存放的行数据越多,其性能就越高,那么,怎么查看表中对应的是什么的行格式,可以使用以下SQL来查询

[root@localhost][(none)]> SHOW TABLE STATUS IN wms_inventory_0002\G;
*************************** 1. row ***************************
           Name: test
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 3
 Avg_row_length: 5461
    Data_length: 16384
Max_data_length: 0
   Index_length: 32768
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-05-16 10:15:58
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
*************************** 2. row ***************************
           Name: wmp_inventory_key_0122
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 5103619
 Avg_row_length: 95
    Data_length: 489684992
Max_data_length: 0
   Index_length: 422559744
      Data_free: 416284672
 Auto_increment: NULL
    Create_time: 2017-05-10 11:32:55
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
2 rows in set (0.00 sec)

ERROR: 
No query specified

-- 或者使用information库中的信息进行查询
[root@localhost][(none)]> SELECT NAME, ROW_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME='wms_inventory_0002/test';
+-------------------------+------------+
| NAME                    | ROW_FORMAT |
+-------------------------+------------+
| wms_inventory_0002/test | Compact    |
+-------------------------+------------+
1 row in set (0.00 sec)


从上面可以看出,默认创建的行格式就是为Compact这种,那么这种行格式,本身所带的格式是怎样的?


1)变成字段

a.列长度<255字节,用1字节表示

b.>255字节,用2字节表示

长度最大不能超过2个字节,因为MySQL 数据库中VARCHAR的最大长度限制为65535

2)NUll 标志位

记录该行数据是否有NULL值,有就用1表示,占1个字节

3)记录头信息

固定占5个字节,也就是40位。

4)实际的每列的数据

每行数据除了用户定义的列外,有两个隐藏列,事务ID和回滚指针列

如果这个行数据有NULLL,则不占任何空间


Redundant属于MySQL5.0之前的格式,目前线上应该很少会再涉及到这么旧的版本,在这里,就不在阐述


参考的官网网址

https://dev.mysql.com/doc/refman/5.7/en/innodb-physical-record.html

老姜的InnoDB存储引擎






你可能感兴趣的:(MySQL)