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

如何优化InnoDB表BLOB,TEXT列的存储效率

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

如何优化InnoDB表BLOB,TEXT列的存储效率

这篇文章主要介绍了如何优化InnoDB表BLOB,TEXT列的存储效率,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

首先,介绍下关于MySQL InnoDB引擎存储格式的几个要点:

1、InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理、维护。启用 innodb_file_per_table 选项,5.5以后可以在线动态修改生效,并且执行 ALTER TABLE xx ENGINE = InnoDB 将现有表转成独立表空间,早于5.5的版本,修改完这个选项后,需要重启才能生效。

2、InnoDB的data page默认16KB,5.6版本以后,新增选项 innodb_page_size 可以修改,在5.6以前的版本,只能修改源码重新编译,但并不推荐修改这个配置,除非你非常清楚它有什么优缺点。

3、InnoDB的data page在有新数据写入时,会预留1/16的空间,预留出来的空间可用于后续的新纪录写入,减少频繁的新增data page的开销。

4、每个data page,至少需要存储2行记录。因此理论上行记录最大长度为8KB,但事实上应该更小,因为还有一些InnoDB内部数据结构要存储。

5、受限于InnoDB存储方式,如果数据是顺序写入的话,最理想的情况下,data page的填充率是15/16,但一般没办法保证完全的顺序写入,因此,data page的填充率一般是1/2到15/16。因此每个InnoDB表都最好要有一个自增列作为主键,使得新纪录写入尽可能是顺序的。

6、当data page填充率不足1/2时,InnoDB会进行收缩,释放空闲空间。

7、MySQL 5.6版本的InnoDB引擎当前支持COMPACTREDUNDANTDYNAMICCOMPRESSED四种格式,默认是COMPACT格式,COMPRESSED用的很少且不推荐(见下一条),如果需要用到压缩特性的话,可以直接考虑TokuDB引擎。

8、COMPACT行格式相比REDUNDANT,大概能节省20%的存储空间,COMPRESSED相比COMPACT大概能节省50%的存储空间,但会导致TPS下降了90%。因此强烈不推荐使用COMPRESSED行格式。

9、当行格式为DYNAMIC或COMPRESSED时,TEXT/BLOB之类的长列(long column,也有可能是其他较长的列,不一定只有TEXT/BLOB类型,看具体情况)会完全存储在一个独立的data page里,聚集索引页中只使用20字节的指针指向新的page,这就是所谓的off-page,类似ORACLE的行迁移,磁盘空间浪费较严重,且I/O性能也较差。因此,强烈不建议使用BLOB、TEXT、超过255长度的VARCHAR列类型。

10、当InnoDB的文件格式(innodb_file_format)设置为Antelope,并且行格式为COMPACT 或 REDUNDANT 时,BLOB、TEXT或者长VARCHAR列只会将其前768字节存储在聚集索页中(最大768字节的作用是便于创建前缀索引/prefix index),其余更多的内容存储在额外的page里,哪怕只是多了一个字节。因此,所有列长度越短越好。

11、在off-page中存储的BLOB、TEXT或者长VARCHAR列的page是独享的,不能共享。因此强烈不建议在一个表中使用多个长列。

综上,如果在实际业务中,确实需要在InnoDB表中存储BLOB、TEXT、长VARCHAR列时,有下面几点建议:

1、尽可能将所有数据序列化、压缩之后,存储在同一个列里,避免发生多次off-page。

2、实际最大存储长度低于255的列,转成VARCHAR或者CHAR类型(如果是变长数据二者没区别,如果是定长数据,则使用CHAR类型)。

3、如果无法将所有列整合到一个列,可以退而求其次,根据每个列最大长度进行排列组合后拆分成多个子表,尽量是的每个子表的总行长度小于8KB,减少发生off-page的频率。

4、上述建议是在data page为默认的16KB前提下,如果修改成8KB或者其他大小,请自行根据上述理论进行测试,找到最合适的值。

5、字符型列长度小于255时,无论采用CHAR还是VARCHAR来存储,或者把VARCHAR列长度定义为255,都不会导致实际表空间增大。

感谢你能够认真阅读完这篇文章,希望小编分享的“如何优化InnoDB表BLOB,TEXT列的存储效率”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

免责声明:

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

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

如何优化InnoDB表BLOB,TEXT列的存储效率

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

下载Word文档

猜你喜欢

如何优化Linux空间存储效率

优化Linux空间存储效率是一个多方面的任务,涉及到内存管理、磁盘空间优化、文件系统管理等多个方面。以下是一些具体的优化建议:内存管理优化调整内存回收机制:通过调整内核参数,如/proc/sys/vm/watermark_scale_fa
如何优化Linux空间存储效率
2024-09-30

服务器内存优化:如何提高服务器内存的使用效率

服务器内存是服务器最重要的硬件资源之一,内存优化对于提高服务器性能至关重要。本文将介绍一些服务器内存优化的方法,帮助您提高服务器内存的使用效率。
服务器内存优化:如何提高服务器内存的使用效率
2024-02-12

Elasticsearch分布式搜索中的数据压缩与存储优化(Elasticsearch如何实现数据的高效压缩和存储优化?)

Elasticsearch通过字段级压缩、列式存储、段合并、数据快照、索引生命周期管理、分片和近实时刷新等技术优化存储和压缩。字段级压缩使用LZ4、ZSTD和BZIP2算法。文档存储提供Lucene格式和BKD树列式存储选项。分片实现可扩展性和容错性,而近实时刷新可立即添加新数据。监控和优化工具可帮助用户调整配置并优化性能。
Elasticsearch分布式搜索中的数据压缩与存储优化(Elasticsearch如何实现数据的高效压缩和存储优化?)
2024-04-02

SQLServer 错误 12304 在本机编译的存储过程外部使用内存优化表类型时,如果该类型对表的任意列使用 IDENTITY 属性,则该类型不受支持。 故障 处理 修复 支持远程

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 12304 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 HK_UNSUPPORTED_IDENTITY_TABLE_VAR ...
SQLServer 错误 12304 在本机编译的存储过程外部使用内存优化表类型时,如果该类型对表的任意列使用 IDENTITY 属性,则该类型不受支持。 故障 处理 修复 支持远程
2023-11-05

编程热搜

目录