========================================================

在InnoDB 1.0.x版本之前,InnoDB 存储引擎提供了 Compact 和 Redundant 两种格式来存放行记录数据,Redundant格式是为兼容之前版本而保留的,而Compact行格式在MySQL 5.0中引入,在 MySQL 5.6 版本中,默认设置为 Compact 行格式。
在compact行格式中:
1.使用5个字节来存放记录头信息(record header);
2.使用null位图来记录列中为null的列;
3.对于变长字段列,如果列长度小于255字节,则需要额外的1个字节来记录长度,如果列长度大于255个字节,使用2字节来记录列长度;
4.对于blob/text/varchar等大字段列,只存放768个字节在数据页中,而剩余的数据存储到溢出端(blob page)中

在compact行格式下,如果记录行包含较多的大字段列,即使每个大字段列只存放768个字节在数据页中,也会导致整个记录行的长度超过8KB,而默认数据页16k,每个数据页至少存放两行记录,因此导致下面错误:
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

Compact和redumdant的区别在行记录的首部不同,compact存储格式的首部为一个非NULL的变长字段长度列表,而redundant存储格式的首部是一个字段长度偏移列表。

对于Redundant格式,哪怕只占用769个字节,也会将多余的1个字节存储到额外的page中。

========================================================

在InnoDB 1.0.X版本中开始引入新的文件格式Barracuda,新文件格式有两种新的行记录格式:Compressed 和 Dynamic。新的两种行记录格式采用完全溢出的方式来存放blob/text数据列,仅在数据页中保留20字节的指针,blob列的数据完全存放在Off page中。

off page将数据完全存储到一个独立的data page中(这些页是独享的,不会与同一行其他列或其他行的列共用),对于平均长度较小的blob/text数据列,会造成严重的磁盘空间浪费和IO资源消耗。

对于Compressed行记录格式,会将行数据以zlib的算法来进行数据压缩,因此可对于BLOB、TEXT、VARCHAR 这类大长度类型的数据能够进行非常有效的存储。

如果表采用Compressed行记录格式,可以有效降低IO开销,但是会增加CPU和内存的开销,在缓冲池中需要保留两份SIZE不同但是数据一致的数据页。

PS: 使用Compressed行记录格式的不仅仅对大长度类型的数据有效,对长度较小的变长列也有效果。但总的说来,压缩效率很一般。

========================================================

compact行格式相对redumdant更节省存储空间,Compressed行格式相对于compact更节省存储空间,但强烈不建议使用Compressed行格式,会验证影响TPS。

## 查看默认的行格式
show variables like 'innodb_file_format';##============================##
## 查看表的行格式
show table status like 'table_name'\G

========================================================

innodb_page_size参数在MySQL 5.6版本中引入,用来修改每个数据页的默认大小,默认值为16KB。在MySQL 5.6之前版本需要修改源代码才能修改数据页大小。

对于InnoDB存储引擎,数据页的填充率为15/16,预留出1/16的空间用来避免后续数据插入修改而导致页拆分的情况。当数据页的填充率小于1/2时,InnoDB会进行收缩,释放空闲空间。

转载于:https://www.cnblogs.com/gaogao67/p/10480110.html

MySQL Innodb Engine -- 文件格式(innodb_file_format)相关推荐

  1. 【数据库篇】MySQL InnoDB ibd 文件格式解析

    mysql innodb的表由.frm .ibd 组成,frm:存了每个表的元数据,包括表结构的定义等:ibd:存了每个表的元数据,包括表结构的定义等: 1.0 ibd文件基本结构 ibd文件由Tab ...

  2. mysql innodb 从 ibd 文件恢复表数据

    最近内部的 mysql 数据库发生了一件奇怪的事,其中有一个表 users625 突然出现问题, 所有对它的操作都报错误 数据表不存在. mysql> select count(*) from ...

  3. 浅析MySQL InnoDB的隔离级别

    前言 还是老规矩,首先提出两个待解决的问题: MySQL InnoDB存储引擎中事务的隔离级别有哪些? 对应隔离级别的实现机制是什么? 本文就将对上面这两个问题进行解答,分析事务的隔离级别以及相关锁机 ...

  4. 如何不停机迁移一个mysql INNODB 数据库?

    2019独角兽企业重金招聘Python工程师标准>>> 如何不停机迁移一个mysql INNODB 数据库? http://www.itpub.net/thread-1776724- ...

  5. MySQL/InnoDB处理AUTO_INCREMENT(二)

    2019独角兽企业重金招聘Python工程师标准>>> MySQL/InnoDB处理AUTO_INCREMENT(二) http://dev.mysql.com/doc/refman ...

  6. mysql innodb 1017_MySQL InnoDB表压缩

    MySQL InnoDB表压缩 文件大小减小(可达50%以上) ==> 查询速度变快(count * 约减少20%以上时间) 如何设置mysql innodb 表的压缩: 第一,mysql的版本 ...

  7. mysql 排序后 下一条记录_什么是MySQL InnoDB 二级索引的排序?|附实例详解

    概述 今天主要给大家介绍了关于MySQL InnoDB 二级索引的排序的相关资料,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 每个InnoDB表具有一个特殊的索引称为聚簇 ...

  8. MySQL InnoDB表压缩

    MySQL InnoDB表压缩 文件大小减小(可达50%以上) ==> 查询速度变快(count * 约减少20%以上时间) 如何设置mysql innodb 表的压缩: 第一,mysql的版本 ...

  9. MySQL innodb每行数据长度的限制

    今天在使用MySQL innodb时,create table时,报出这样的一个错误: Row size too large. The maximum row size for the used ta ...

  10. mysql innodb隔离级别_浅析MySQL InnoDB的隔离级别

    本文就将对上面这两个问题进行解答,分析事务的隔离级别以及相关锁机制. 隔离性简介 隔离性主要是指数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的"独立"环境执行,意思 ...

最新文章

  1. Thread类中yield方法
  2. 解决 C/C++ 程序执行后控制台一闪而过的方法
  3. 计算机协会丨让技能得到提升,让思维受到启迪
  4. vscode remote ssh 重新连接_使用 VSCode 愉快地进行 R 远程开发
  5. python中的优化器有哪些_Python SciPy 优化器(Optimizers)
  6. elasticsearch数据备份还原
  7. 一个逐页抓取网站小说的爬虫
  8. java可选参数_Java可选
  9. 自定义简单控件之标题控件
  10. NVM:使用nvm安装管理node版本
  11. mac os 10.10 safari java插件_OS X 10.10 Yosemite强大而漂亮的Safari 8浏览器
  12. NHibernate Issues之1898:命名查询
  13. 58.3万笔/秒!看阿里的黑科技
  14. Java开发必须掌握!java面试没问技术问题
  15. 华为商店的软件可以鸿蒙,鸿蒙到底想要什么?是维护渠道的霸权还是万物互联?...
  16. 2023.3.5英语单词学习笔记
  17. 淘宝美工教程:1小时让店铺高大上-优就业-专题视频课程
  18. 自己动手学TCP/IP--ICMP(ping报文)
  19. 实验8-存储过程和触发器的创建及应用
  20. 【指引】新手如何自学网页爬虫(更新完结)

热门文章

  1. Linux 下压缩与解压.zip和.rar
  2. 世界主要国家的网络管理体制
  3. 《C++游戏编程入门(第4版)》——1.9 本章小结
  4. [原]浅谈几种服务器端模型——多进程并发式
  5. 网络攻击导致企业遭受损200万美元
  6. 在笔记本上试用kvm[原]
  7. 生产环境下lnmp的权限说明
  8. 【LeetCode-面试算法经典-Java实现】【129-Sum Root to Leaf Numbers(全部根到叶子结点组组成的数字相加)】...
  9. Linux下的压缩和解压缩命令——compress/uncompress
  10. 强联通块tarjan算法