首页 > 数据库技术 > 详细

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

时间:2020-04-20 09:36:13      阅读:62      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!