您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

bubuko 2022/1/25 19:56:29 mysql 字数 1421 阅读 654 来源 http://www.bubuko.com/infolist-5-1.html

InnoDB是将数据存在磁盘上的存储引擎。 查询需要将磁盘数据读到内存来处理,修改删除需要将内存数据写入磁盘。磁盘IO是非常慢的,所以,以页(16KB)作为内存和磁盘交互的基本单位。 insert一条数据,该数据就包含在页中,每条数据存储有一定的格式要求,通过ROW_FORMAT来指定。如:CREA ...

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

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

 

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

row_format有四种格式:CompactRedundantDynamicCompressed

技术分享图片

 

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

技术分享图片

 

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

 

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

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

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

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

 

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

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

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

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

原文:https://www.cnblogs.com/tommaoxiaoqi/p/12735719.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶