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

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

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

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

row_format有四种格式:Compact、Redundant、Dynamic和Compressed

b3f7e0644bd6ea414fce5e8bcad325e2.png

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

1130e382e0f979f86563a3ef2fd261ef.png

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值