MySQL之InnoDB存储引擎:Row Format行格式

577 阅读3分钟

Row Format行格式

指数据记录(或者称之为行)在磁盘中的物理存储方式。具体地,对于InnoDB存储引擎而言,常见的行格式类型有Compact、Redundant、Dynamic和Compressed

设置、修改行格式信息

在创建、修改数据表的时候,可以显式地指定row format行格式。SQL语句语法如下

-- 创建数据表时,显示指定行格式
CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称;
-- 创建数据表时,修改行格式
ALTER TABLE 表名 ROW_FORMAT=行格式名称;

与此同时,如果需要查看某数据表的行格式,可通过如下语句实现

show table status from 数据库名 like '<数据表名>';

show table status from cloperationsreportsdb  like 'groupbusioverview';

image.png

Compact 行格式

Compact行格式在MySQL 5.0中被引入,其目标是为了更高效的存储数据记录。在该格式下,一条数据记录的组成部分如下所示。其大体分为两部分——记录的额外信息、记录的数据内容。后者比较好理解,其即是我们存储到数据库的各列(字段)数据值。而前者则是MySQL为了更好描述该条记录而添加的额外信息

image.png

Redundant 行格式

Redundant作为MySQL 5.0之前使用的一种行格式,其示意图如下所示,可以看到其与compact行格式在结构上大体还是比较相似的。这里主要来介绍下其与compact行格式不同之处

image.png

Dynamic、Compressed行格式

对于Dynamic、Compressed行格式而言,其和compact行格式比较相似。不同的在于,对待处理行溢出的处理及策略,Dynamic、Compressed行格式会把记录中数据量过大的字段值全部存储到溢出页中,而不会在该记录的数据内容的相应字段处存储该字段值前768个字节的数据了。而compressed相比较dynamic行格式来说,前者会使用压缩算法对所有页面(自然也包括溢出页)进行压缩以减少存储占用

行溢出

众所周知,InnoDB存储引擎中内存与硬盘交互的基本单位是页,一般 页大小为16KB。 MySQL规定一个页中至少需要存放两条记录。

而所谓的行溢出是指:当某个记录的某个字段(varchar、text、blob等类型)的值长度过长、数据量过大,会导致一个页中放不下一条记录,为此在compact、redundant行格式中,如果该记录某字段中数据量过多时,则在该记录的数据内容的相应字段处 只存储该字段值前768个字节的数据和 一个指向存储剩余数据的其他页(即所谓的溢出页)的地址,该地址通常占用20个字节

Mysql表名 字段名最长长度

  1. 数据库名字最长为 < 64字符
  2. 数据表名字最长为 < 64字符
  3. 字段名字最长为 < 64字符

建议 不超过 12 个字符 参考《阿里巴巴java开发手册》

表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。字段名称需要慎重考虑。

数据类型默认长度最大长度
varchar25565535
char25565535
double0255
float0255
int11255
tinyint4255
bigint20255
date00
datetime00
text00

注意 order_no int(5) unsigned zerofill DEFAULT NULL 当字段长度小于5时将会用‘0’补齐;