实用指南:MySQL InnoDB表压缩:性能优化全解析

news/2025/10/1 17:03:30/文章来源:https://www.cnblogs.com/wzzkaifa/p/19122561

这段内容是 MySQL 官方文档 17.9.1 节:InnoDB 表压缩(InnoDB Table Compression) 的引言部分,它是一个子章节的总览,告诉你接下来要讲什么。

我们来一步步拆解、解释和通俗化这段内容,帮助你彻底理解 “InnoDB 表压缩” 是什么、怎么用、以及它在整个 MySQL 压缩体系中的定位。


一句话总结

InnoDB 表压缩 是一种通过 ROW_FORMAT=COMPRESSED 来启用的压缩技术,适用于使用 独立表空间(file-per-table)或通用表空间(general tablespace) 的 InnoDB 表。它的目标是 减少磁盘和内存中的数据量,提升性能和存储效率


一、什么是 “InnoDB 表压缩”?

✅ 定义:

InnoDB 表压缩(Table Compression)是一种 在页级别对数据和索引进行压缩 的技术,压缩后的数据存储在磁盘上,读取时再解压到内存中。

它不是“文件系统压缩”,而是 InnoDB 存储引擎原生支持的压缩机制


二、支持的表空间类型(重要前提)

文档强调:

“supported with InnoDB tables that reside in file_per_table tablespaces or general tablespaces

意思是:只有以下两种表空间支持表压缩

表空间类型说明
file_per_table(独立表空间)每个表一个 .ibd 文件(默认开启)
通用表空间(General Tablespace)多个表共享一个 .ibd 文件(MySQL 5.7+ 引入)
❌ 系统表空间(ibdata1不支持压缩!

所以,只要你的表是默认创建的(每个表一个 .ibd 文件),就可以使用表压缩。


️ 三、如何启用表压缩?

使用 ROW_FORMAT=COMPRESSED

1️⃣ 创建表时启用

CREATE TABLE t1 (
id INT PRIMARY KEY,
name VARCHAR(100)
) ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;  -- 可选:目标压缩页大小(KB)
  • ROW_FORMAT=COMPRESSED:启用压缩
  • KEY_BLOCK_SIZE:指定压缩后的页大小(单位 KB),可选值:1, 2, 4, 8

例如:KEY_BLOCK_SIZE=8 表示希望将 16KB 的原始页压缩成 8KB 存储

2️⃣ 修改已有表

ALTER TABLE t1
ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;

⚠️ 注意:ALTER TABLE 会重建表,可能耗时较长。


四、接下来各小节内容预告(目录解析)

文档列出了 17.9.1 下的几个子章节,我们来解释每个部分讲什么:


17.9.1.1 Overview of Table Compression(概述)


17.9.1.2 Creating Compressed Tables(创建压缩表)

  • 详细语法:CREATE TABLE ... ROW_FORMAT=COMPRESSED
  • KEY_BLOCK_SIZE 的含义和选择
  • 存储空间计算示例
  • 如何选择合适的压缩页大小

17.9.1.3 Tuning Compression for InnoDB Tables(调优)


17.9.1.4 Monitoring InnoDB Table Compression at Runtime(运行时监控)

  • 如何查看压缩效果
  • 使用 INFORMATION_SCHEMA.INNODB_CMPINNODB_CMP_PER_INDEX
    • 压缩尝试次数
    • 成功次数
    • 压缩失败原因
    • 平均压缩比

示例查询:

SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP;

输出字段如:

  • page_size:压缩页大小
  • compress_ops:压缩操作次数
  • compress_ops_ok:成功次数
  • compress_time / uncompress_time:耗时

17.9.1.5 How Compression Works for InnoDB Tables(压缩原理)

  • 底层机制:InnoDB 如何压缩和解压页
  • 使用 zlib 算法
  • 压缩发生在写入磁盘前,解压发生在读入 Buffer Pool 时
  • 压缩页在内存中仍是解压状态
  • 为什么不能压缩所有类型的页(如 undo log)

17.9.1.6 Compression for OLTP Workloads(OLTP 工作负载的压缩)


17.9.1.7 SQL Compression Syntax Warnings and Errors(语法警告和错误)

  • 常见错误:
    • 在系统表空间中启用压缩 → 报错
    • KEY_BLOCK_SIZE 超出范围 → 报错
    • 压缩参数不兼容 → 警告
  • 如何解读错误信息
  • 兼容性说明(不同 MySQL 版本)

⚖️ 五、表压缩的优缺点总结

✅ 优点❌ 缺点
减少磁盘空间使用增加 CPU 使用率(压缩/解压)
减少磁盘 I/O频繁更新可能导致“压缩失败”或“页分裂”
更多数据可缓存在 Buffer Pool不支持系统表空间
索引也被压缩,提升查询性能配置稍复杂(需设置 KEY_BLOCK_SIZE
适合 SSD 存储压缩率取决于数据内容(文本高,二进制低)

六、表压缩 vs 页压缩(透明压缩)—— 你应该用哪个?

特性表压缩(Table Compression)页压缩(Page Compression)
MySQL 版本5.7+8.0.20+
启用方式ROW_FORMAT=COMPRESSEDCOMPRESSION="zstd"
压缩算法zlibzlib, lz4, zstd
性能一般更好(尤其写性能)
透明性较低高(几乎透明)
推荐程度❌ 老项目兼容✅ 新项目首选

建议


✅ 总结:关键要点

要点说明
表压缩是 InnoDB 的一种页级压缩技术
支持条件必须是 file_per_table通用表空间
启用方式ROW_FORMAT=COMPRESSED + KEY_BLOCK_SIZE
压缩算法zlib
监控工具INFORMATION_SCHEMA.INNODB_CMP
适合场景大表、SSD、读多写少、归档数据
注意事项增加 CPU 开销,不支持系统表空间
新项目建议使用更现代的 页压缩(COMPRESSION)

一句话建议

如果你在维护一个老系统,或者必须使用 ROW_FORMAT,可以使用 InnoDB 表压缩;但如果是新项目,强烈建议直接使用 MySQL 8.0 的 透明页压缩(COMPRESSION="zstd",更简单、更高效。

需要我帮你写一个脚本,自动分析哪些表适合启用压缩吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

采集网站开发网站页面设计和结构的技巧

一、 开始的开始——调研、还是调研、一直在路上…… 在只有关于疫情给老年人的带来的问题大方向下,我去到街上随机的拉老年人进行调研。这是我第一次如此频繁的跟陌生老年人沟通。此期间,跟他们的沟通中我发现除了口音上的差异,还有更多的是…

AT_agc052_b [AGC052B] Tree Edges XOR

考虑边权转点权,让边权满足其为相邻点权的异或和,操作变成交换两个点的点权。 随便钦定一个为根,设 d i ​ 为初始时 i 的点权,f i ​ 是 i 期望得到为多少。如果存在 d,f,满足它们是相同的集合,就有解。 注意到…

pc开奖网站开发绵阳网站建设维护

1. 安装软件准备1.1. 软件准备1.zabbix-2.4.8.tar.gz zabbix-3.0.31.tar.gz下载地址:https://www.zabbix.com/download2.php5.4.16.tar.gz下载地址:https://www.php.net/downloads.php1.2. 注意事项安装过程路径、密码尽量不要出现中文、特殊字符、空格、…

详细介绍:C语言指针进阶(进阶)

详细介绍:C语言指针进阶(进阶)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

背单词 纯英文 2025年10月

2025-10-02coronation, horrific, pal, 2025-10-01quack, dais, notation, replicate, despoil,bizarre, differentiate, banister, intelligible, incest,obligatory, deviate, recourse, delineate, haversack

「Diary Solution Set」October 2025 在凉雨停歇的那天

2025.10.1 国庆节日常被作业包围。将世界最后的空白刻印在斑驳心海 而我等蜉蝣只得抒发不足日的无奈 无名歌者哼唱着积雨云为之落泪的歌在人海发现 ARC 原来有这么多优质计数。

潍坊网站建设小程序公司企业邮箱怎么登陆

转自:http://blog.csdn.net/warrior_zhang/article/details/41453327 机器学习的常用方法,主要分为有监督学习(supervised learning)和无监督学习(unsupervised learning)。 监督学习,就是人们常说的分类,通过已有的训练样本&am…

macOS Tahoe All In One

macOS Tahoe All In OnemacOS Tahoe All In One全新 Liquid Glass 设计,看着亮丽,感觉舒心,一用好熟悉。 连续互通再进化,现已连通 iPhone 上的电话 App 和实时活动功能。 直接用“聚焦”执行数百种操作,敲敲键盘…

关于一学一做的短视频网站好wordpress聚合广告平台

一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作面向对象中的一些概念下表列出了 面向对象 编程中的一些概念名词说明对象对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有…

风力发电机输出功率模型综述 - 详解

风力发电机输出功率模型综述 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

网站程序代码wordpress 软件公司模板

改变dom样式有两种做法,一种是通过domNode.style.xxx "",给domNode加上内置样式,这种方式如果需要的样式比较多,就只好一个个增加,比较麻烦,还有一种方式比较聪明,通过在css里预设好几种不同样式…

2025年小红书创作者影响力分析报告:基于10.5万条素材构建评估模型,识别高影响力内容特征,优化推荐算法与运营策略,涵盖用户分层、互动数据、地理位置分布,提供内容策略优化与创作者成长建议。

2025年小红书创作者影响力分析报告:基于10.5万条素材构建评估模型,识别高影响力内容特征,优化推荐算法与运营策略,涵盖用户分层、互动数据、地理位置分布,提供内容策略优化与创作者成长建议。pre { white-space: …

MaopaiJD Esp8266 代码

#include <ESP8266WiFi.h> // ESP8266 WiFi功能库 #include <PubSubClient.h> // MQTT客户端库 #include <EEPROM.h> // EEPROM存储库 #include <ESP8266WebServer.h> // …

英语_错题集_25-10

正确答案是 **D. from**。 **中文解答:** 这句话的意思是:“2018年冬季奥运会于2月9日至25日在韩国举行。” 这里描述的是一个**时间段**,从开始日期(2月9日)到结束日期(2月25日)。在英语中,表示“从……到………

seo站长教程wordpress增强编辑器

文章目录 一、TF-IDF算法介绍二、举例说明三、示例&#xff1a;代码实现四、总结 一、TF-IDF算法介绍 TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是一种用于信息检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法&#xff0c;用以评估一个词…

Ynoi Easy Round 2015 学习笔记

很牛的一套题,非常非常综合。做完感觉 ds 水平飞起来了。 我会把实现讲的详细一些。 当然,这篇文章没有 Day2T3 世界上最幸福的女孩。我不会 geo,geo 是我最菜的领域。 按照个人难度排序。 Day2T1 此时此刻的光辉 主…

详细介绍:《红色脉络:一部PLMN在中国的演进史诗 (1G-6G)》 第11篇 | 核心网演进终局:从EPC到5GC——微服务与“云原生”

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站地图提交入口现在做个企业网站一般多少钱

https://lug.ustc.edu.cn/wiki/mirrors/help转载于:https://www.cnblogs.com/hikecn/p/5797959.html

公司做的网站打开慢网站新闻稿模板

一、前言 延迟队列的使用场景&#xff1a;1.未按时支付的订单&#xff0c;30分钟过期之后取消订单&#xff1b;2.给活跃度比较低的用户间隔N天之后推送消息&#xff0c;提高活跃度&#xff1b;3.过1分钟给新注册会员的用户&#xff0c;发送注册邮件等。 实现延迟队列的方式有…