MySQL 5.5的COMPRESSED INNODB表是什么?如何创建和使用?

来源:3D模型作者:松本一香头衔:网络博主
导读:本期聚焦于小伙伴创作的《MySQL 5.5的COMPRESSED INNODB表是什么?如何创建和使用?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《MySQL 5.5的COMPRESSED INNODB表是什么?如何创建和使用?》有用,将其分享出去将是对创作者最好的鼓励。

什么是COMPRESSED INNODB表

COMPRESSED是MySQL 5.5中InnoDB存储引擎支持的一种表格式,它通过对数据页进行压缩来减少表的存储空间占用。这种格式的表会将数据页压缩后存储到磁盘,读取时再进行解压,适合存储大量文本、BLOB等可压缩数据的场景。

MySQL 5.5的COMPRESSED INNODB表是什么?如何创建和使用?

COMPRESSED INNODB表的创建方式

创建新表时指定压缩格式

在创建表的时候,可以通过ROW_FORMAT参数指定为COMPRESSED,同时可以设置压缩的块大小,可选的块大小有1KB、2KB、4KB、8KB、16KB,默认和InnoDB页大小一致,通常是16KB。

-- 创建COMPRESSED格式的InnoDB表,指定压缩块大小为8KB
CREATE TABLE compressed_test (
    id INT PRIMARY KEY AUTO_INCREMENT,
    content TEXT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

修改已有表为压缩格式

如果已经存在普通格式的InnoDB表,可以通过ALTER TABLE语句修改表的行格式为COMPRESSED,注意修改过程会锁表并且重建表,大表操作需要提前评估影响。

-- 将已有表修改为COMPRESSED格式,压缩块大小为4KB
ALTER TABLE existing_table ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;

COMPRESSED INNODB表的配置要求

要使用COMPRESSED格式的InnoDB表,需要确保MySQL 5.5的InnoDB配置满足以下条件:

  • innodb_file_per_table参数需要开启,因为COMPRESSED表需要使用独立的表空间文件
  • innodb_file_format参数需要设置为Barracuda,这是支持COMPRESSED格式的InnoDB文件格式

可以通过以下SQL语句查看和修改相关配置:

-- 查看当前InnoDB文件格式配置
SHOW VARIABLES LIKE 'innodb_file_format';
-- 查看是否开启独立表空间
SHOW VARIABLES LIKE 'innodb_file_per_table';
-- 设置InnoDB文件格式为Barracuda
SET GLOBAL innodb_file_format=Barracuda;
-- 开启独立表空间
SET GLOBAL innodb_file_per_table=ON;

COMPRESSED INNODB表的优缺点

优点

  • 显著减少表的存储空间占用,尤其是存储大量可压缩数据时,压缩率可以达到30%到70%
  • 减少磁盘I/O次数,因为同样的数据量占用的磁盘页更少,查询时读取的页数量减少
  • 适合存储归档数据、日志类数据等写入后很少修改的场景

缺点

  • 写入和更新数据时需要额外的压缩和解压开销,会占用更多的CPU资源
  • 压缩块大小设置不合理可能导致页分裂,反而影响性能
  • 不支持使用ROW_FORMAT=COMPRESSED的同时使用表空间加密功能

使用注意事项

在使用COMPRESSED INNODB表时,需要注意以下几点:

  • 压缩块大小需要根据实际数据特点调整,通常建议先测试不同块大小的压缩率和性能,再选择合适的配置
  • 频繁更新的表不建议使用COMPRESSED格式,因为更新带来的解压和重新压缩开销会抵消存储和I/O的优势
  • 可以通过SHOW TABLE STATUS LIKE 'table_name'查看表的压缩相关信息,比如Data_length可以反映压缩后的数据大小

压缩效果验证示例

可以通过创建相同数据的普通表和COMPRESSED表,对比两者的存储空间占用,验证压缩效果:

-- 创建普通InnoDB表
CREATE TABLE normal_test (
    id INT PRIMARY KEY AUTO_INCREMENT,
    content TEXT
) ENGINE=InnoDB;
-- 插入大量测试数据
DELIMITER //
CREATE PROCEDURE insert_test_data()
BEGIN
    DECLARE i INT DEFAULT 0;
    WHILE i < 10000 DO
        INSERT INTO normal_test(content) VALUES (REPEAT('测试压缩数据', 100));
        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;
CALL insert_test_data();
-- 复制数据到COMPRESSED表
CREATE TABLE compressed_test_copy (
    id INT PRIMARY KEY AUTO_INCREMENT,
    content TEXT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
INSERT INTO compressed_test_copy SELECT * FROM normal_test;
-- 查看两个表的大小
SHOW TABLE STATUS LIKE 'normal_test';
SHOW TABLE STATUS LIKE 'compressed_test_copy';

通过对比两个表的Data_length字段,可以直观看到COMPRESSED表的存储空间比普通表小很多。

MySQLCOMPRESSED_INNODBInnoDB表压缩数据库存储优化修改时间:2026-07-23 16:06:14

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。