MySQL row_format compressed vs dynamic
当我们在MySQL中创建表格时,其中一个可选参数是”row_format”,它可以控制MySQL如何从磁盘读取和存储数据行。本文将重点讨论行格式的两个主要选项:压缩(”compressed”)和动态(”dynamic”)。
阅读更多:MySQL 教程
Row format 介绍
首先需要了解下什么是行格式(Row Format)?行格式旨在为存在磁盘上的数据提供最佳的硬件使用和性能接口。MySQL提供多种行格式,包括动态长度行,固定长度行,COMPACT行和红灯(REDUNDANT)行。
对于每个表格,我们可以定义表格的行格式,以便MySQL可以更好地处理对该表的查询。下面我们将介绍MySQL行格式压缩和动态两种选项。
什么是压缩行格式?
行格式压缩是MySQL为InnoDB表格提供的一项高级功能。压缩行格式使用的是zlib库进行压缩和解压缩。以下是一些例子,当我们创建一张表格时指定行格式为COMPRESSED:
数据行将采用压缩格式存储在磁盘上。
压缩行格式优点
- 减少磁盘空间占用,减少I/O操作,提高了性能
- 减少数据在磁盘上的传输时间
- 改善了缓存访问的性能
- 可选压缩,如果数据已经是压缩的,则No-op
压缩行格式缺点
- 将CPU计算负载转移到I/O,因此在大量更新或大量查询的操作下,可能会影响性能
-
压缩和解压缩过程可能会消耗服务器的CPU资源
什么是动态行格式?
动态行格式可以根据行中存储的实际数据自动调整每行的长度。这样,只有实际存储的数据需要使用磁盘空间。以下是一个例子,当我们创建一张表格时指定行格式为DYNAMIC:
请注意,与COMPRESS相比,“DYNAMIC”行格式是InnoDB 5.x默认行格式。
动态行格式优点
- 生成固定长度和动态长度存储行生成行格式默认为动态长度
- 压缩行格式HALL和RALL与动态长度行格式兼容(最小长度限制为768字节)
- 动态行格式在可用性和可靠性方面与压缩行格式相同,但是每个行只对其实际大小占用空间。
- 增加了性能,因为每个行只使用实际大小的空间。
何时使用动态行格式?
由于行格式DYNAMIC在InnoDB 5.x中已成为默认行格式,因此在以下情况下建议使用DYNAMIC格式:
- 想要在硬盘上与CPU之间找到平衡点(即存储空间和CPU计算时间之间的权衡)
- 插入更新操作的数量多,而且数据集比较大,因为DYNAMIC格式可以在存储方面提供优势
- 降低存储空间的总计和每个行的存储空间的成本
- 增加了查询数据的效率,因为行的实际长度仅仅是需要存储的数据的长度
- 减少了I/O操作次数
何时使用压缩行格式?
压缩行格式对于读取较少但对磁盘空间限制较大的表格(如在线事务处理(OLTP)数据集)非常有用。然而,需要注意的是,使用压缩格式可能使某些查询的性能受到影响,因为将CPU负载转移到I/O操作。
此外,在进行大量更新或大量查询的操作中,CPU计算负载可能会对行格式压缩的使用产生重大影响。
因此,建议在以下情况下使用压缩格式:
- 存储空间非常关键,因为压缩格式可以减少磁盘使用量
-
在OLTP应用程序中,因为通常有大量读取操作和相对较少的修改操作。
总结
在使用MySQL时,选择正确的行格式非常重要。在使用MySQL创建表格时,您可以指定行格式为COMPRESSED或DYNAMIC。如果您想要在存储成本和查询效率之间达到平衡,则使用DYNAMIC行格式。如果您更关注存储成本,则使用压缩行格式。但是,需要注意的是,行格式压缩可能会将CPU负载转移到I/O操作,从而影响某些查询的性能。
因此,在选择行格式时,请考虑应用程序的特定需求,例如查询的复杂性和大小,每个表格的可用存储空间,以及提供处理器时间的可用性。