我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【MYSQL】InnoDB行溢出数据说明

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【MYSQL】InnoDB行溢出数据说明

    首先说下MySQL数据库的varchar字段,真的很实用,它可以存放65536字节的数据,比oracle和sqlserver大多了,但是在使用varchar时也有几点要注意;

    1、65536只是这么说,要建表的时候指定一个字段65536仍然会报错,因为字段本身还有其他开销,实际只能存放65532字节。
    2、65532字节并不是每个varchar字段都可以设置的,他是一个总和,也就是说如果有2个varchar字段的表,那么每个varchar字段只能设置65532/2的值。
    3、建表时要注意编码格式哦,varchar(65532)代表的是字节数,如果使用GBK或者UTF-8那就无法建立成功了,因为GBK一个字符占用2字节,UTF-8一个字符占用3字节
    以上概念比较简单,大家建个表试验一下就好,这里不再做实验;大家知道,页(PAGE)是innoDB存储引擎的最小存储单位,默认大小为16KB,及16384字节,行数据存储在页中;那么一行数据如果超过了一个页能够存储的大小怎么办?比如上面说的varchar(65532),65532字节该如何存储?这个时候就会发生行溢出。

行溢出
    InnoDB存储引擎可以将一条记录中的某些数据存储在真正的数据页面之外,一般为BLOB\LOB这类的大对象列类型。但是也不是绝对,BLOB可以不将数据放在溢出页面,而且即便是VARCHAR列数据类型,依然有可能被存放为行溢出数据,比如上例

    我们执行:insert into 表名 select repeat('a',65532),就将一行65532字节的数据插入到表中了,实际上在底层,真正的数据页只存储了一小部分数据,之后是偏移量,指向行溢出数据,这时会产生N个未压缩的二进制大对象页 Uncompressed BLOB Page,这些大对象页中才是完整存放了65532字节的数据。

    那么,一行数据为多大时,会发生行溢出呢?我们知道InnoDB存储引擎表是索引组织的,即B+树结构,这样一个页中至少要保证有2条数据,否则就变成链表了,如果只能存放一条数据,那么InnoDB存储引擎会自动将它存放在溢出页中。如果可以在一个页中至少放入两行数据,那么就不会发生行溢出
    
    其实对于BLOB类型的数据,跟varchar也是一个道理,要看实际的大小,当然,用户既然使用了blob列类型,一般不可能存放长度过小的数据,因此在大多数情况下BLOB的行数据还是会发生行溢出,实际数据保存在BLOB页中,数据页只保存数据的前768字节。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【MYSQL】InnoDB行溢出数据说明

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解MySQL的数据行和行溢出机制

一、行 有哪些格式? 你可以像下面这样看一下你的MySQL行格式设置。其实MySQL的数据行有两种格式,一种就是图中的 Compact格式,还有一种是Redundant格式。 Compact是一种紧凑的行格式,设计的初衷就是为了让一个数据页
2022-05-10

从一条数据说起——InnoDB行存储数据结构

本篇博客参考掘金小册——MySQL 是怎样运行的:从根儿上理解 MySQL先给大家讲一个故事,我刚参加工作,在一个小作坊里面当【码畜】(尽管现在也是),有一天老板从我背后走过,说了一句举世震惊的话:我看你们的数据库和excel一样,不就是一行行数据,人家exc
从一条数据说起——InnoDB行存储数据结构
2019-02-19

【MYSQL】误删数据恢复流程说明

误删数据恢复流程说明 项目场景:使用navicat时,不小心误删除几条数据,需要对数据进行恢复 解决方案: 第一步:保证mysql已经开启binlog,查看命令: 如果没有开启binlog,也没有预先生成回滚SQL,那可能真的无法快速回滚
2023-08-17

怎样进行Visual Studio数据介绍说明

怎样进行Visual Studio数据介绍说明,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。因此,我们需要添加一个Visual Studio数据来比较我们的期望值和返回值。
2023-06-17

如何对Python特定数据库管理进行说明

这篇文章将为大家详细讲解有关如何对Python特定数据库管理进行说明,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在Python里的Python特定数据库,允许Python程序员很方便的创建
2023-06-17

MyBatis JdbcType 与Oracle、MySql数据类型对应关系说明

1. Mybatis JdbcType与Oracle、MySql数据类型对应列表MybatisJdbcTypeOracleMySqlJdbcTypeARRAYJdbcTypeBIGINTBIGINTJdbcTypeBINARYJdbcTyp
2022-05-26

mysql批量删除数据方法及注意事项说明

目录一、批量删除编程网数据的三种常见方法1、DROP TABLE2、TRUNCATE TABLE3、DELETE FROM table二、TRUNCATE 和 DELETE 的相同之处三、TRUNCATE 和 DELETE 的差异1、事务回
mysql批量删除数据方法及注意事项说明
2024-01-29

Zabbix系统MySQL数据库分区表的设定--精简说明

Zabbix监控中对后台MySQL DB几张历史大表依照时间进行分区无疑可以提高zabbix by时间查询时的性能,可以在zabbix后台DB在安装之初就将table设定为分区表,也可以在使用一段时间后已经有时间的情况下设定table为分区
2023-06-04

Oracle根据逗号拆分字段内容转成多行的函数说明

目录使用场景1.业务表A2.实现拆分SQL3.REGEXP_SUBSTR函数1)参数说明2)案例4.REGEXP_REPLACE函数1)参数说明5.CONNECT BY函数1)基本语法2)案例6.LENGTH函数1)参数说明2)案例总结使用
2023-04-12

【MySQL】MySQL数据库,RDBMS 术语,使用说明和报错解决的详细讲解

作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 M
2023-08-18

编程热搜

目录