MySQL row_format compressed vs dynamic

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:

CREATE TABLE `CompressedRowFormat` (
  `col1` int(11) NOT NULL,
  `col2` varchar(255) DEFAULT NULL,
  `col3` char(10) DEFAULT NULL,
  PRIMARY KEY (`col1`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
SQL

数据行将采用压缩格式存储在磁盘上。

压缩行格式优点

  • 减少磁盘空间占用,减少I/O操作,提高了性能
  • 减少数据在磁盘上的传输时间
  • 改善了缓存访问的性能
  • 可选压缩,如果数据已经是压缩的,则No-op

压缩行格式缺点

  • 将CPU计算负载转移到I/O,因此在大量更新或大量查询的操作下,可能会影响性能

  • 压缩和解压缩过程可能会消耗服务器的CPU资源

什么是动态行格式?

动态行格式可以根据行中存储的实际数据自动调整每行的长度。这样,只有实际存储的数据需要使用磁盘空间。以下是一个例子,当我们创建一张表格时指定行格式为DYNAMIC:

CREATE TABLE `DynamicRowFormat` (
  `col1` int(11) NOT NULL,
  `col2` varchar(255) DEFAULT NULL,
  `col3` char(10) DEFAULT NULL,
  PRIMARY KEY (`col1`)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
Mysql

请注意,与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操作,从而影响某些查询的性能。

因此,在选择行格式时,请考虑应用程序的特定需求,例如查询的复杂性和大小,每个表格的可用存储空间,以及提供处理器时间的可用性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册