mysql数据存储格式---避免行溢出

InnoDB是将数据存在磁盘上的存储引擎。

查询需要将磁盘数据读到内存来处理,修改删除需要将内存数据写入磁盘。磁盘IO是非常慢的,所以,以页(16KB)作为内存和磁盘交互的基本单位。

 

insert一条数据,该数据就包含在页中,每条数据存储有一定的格式要求,通过ROW_FORMAT来指定。如:CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称;

row_format有四种格式:CompactRedundantDynamicCompressed

mysql数据存储格式---避免行溢出

 

 规定:每行最多存65535字节(64KB,BLOB,TEXT除外)。超过大小,创表失败。

mysql数据存储格式---避免行溢出

 

 utf8 一个字符包括1~3个字节。

 

一页最大16KB而一条记录最大可64KB,存在一页存不下一行记录的情况即行溢出

 一个页要求最少存2条记录,加上其他额外信息,大概一条记录超过7KB左右即可能存在行溢出。

对于出现行溢出的情况,Compact行格式是在真实数据中存一部分该行的数据(768个字节)+其他页的地址,把剩下数据放到其他页中。

页的信息存在磁盘上,内存中没有的化,又会涉及磁盘IO。设计表结构的时候尽量不要使用大字段,包括TEXT,BLOB都会存在行溢出。

 

Redundant行格式类似,只是额外信息不同记录的不同。

而Dynamic和Compressed在处理行溢出时不存真实数据,全放到其他页中,只存其他页的地址。

Compressed行格式会采用压缩算法对页面进行压缩,以节省空间。

mysql数据存储格式---避免行溢出

上一篇:【赵强老师】利用数据库触发实现复杂的安全性检查


下一篇:JAVA访问数据库工具