tencent cloud

TDSQL-C MySQL 版

动态与公告
产品动态
产品公告
新手指引
产品简介
产品概述
产品优势
应用场景
产品架构
产品规格
实例类型
产品功能列表
数据库版本
地域和可用区
常用概念
使用限制
使用规范建议
自研内核
内核概述
内核版本更新动态
内核优化版本
功能类特性
性能类特性
安全类特性
稳定性特性
分析引擎特性
内核问题检查与修复
购买指南
计费概述
产品价格
创建集群
变配说明
续费说明
欠费说明
退费说明
按量转包年包月
按量转 Serverless
增值服务计费说明
查看费用账单
快速入门
数据库审计
简介
查看审计实例列表
开通审计服务
查看审计日志
日志投递
配置事后告警
修改审计规则
修改审计服务
关闭审计服务
审计规则模板
查看审计任务
授权子用户使用数据库审计
Serverless 服务
Serverless 简介
创建和管理 Serverless 版集群
弹性管理工具
Serverless 资源包
多可用区部署
配置变更
常见问题
Serverless 成本预估器
操作指南
操作总览
控制台切换集群页面视图
数据库连接
实例管理
配置变更
实例形态管理
集群管理
只读实例管理
数据库代理
账号管理
数据库管理
数据库管理工具(DMC)
参数配置
多可用区部署
全球数据库
备份与恢复
操作日志
迁移数据
并行查询
列存索引 CSI
分析引擎
数据库安全和加密
监控与告警
SQL 基本操作
使用 SCF 连接 TDSQL-C MySQL 版
标签
实践教程
TDSQL-C MySQL 版数据库审计等保实践
通过 DTS 升级数据库版本 MySQL5.7至8.0
TDSQL-C MySQL 版使用规范
新版本控制台
数据库代理多连接地址实现多 RO 组
数据库代理的优势
如何选择存储空间计费模式
通过 DTS 构建异地灾备
为集群创建 VPC
如何进行数据恢复
如何解决 CPU 使用率高的问题
如何授权子用户查看监控
白皮书
安全白皮书
性能白皮书
故障处理
连接相关
性能相关
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Multi-Availability Zone APIs
Other APIs
Audit APIs
Database Proxy APIs
Backup and Recovery APIs
Parameter Management APIs
Billing APIs
serverless APIs
Resource Package APIs
Account APIs
Performance Analysis APIs
Data Types
Error Codes
常见问题
基础概念
购买与计费
兼容与格式
连接与网络
功能特性
控制台操作
数据库表
性能与日志
数据库审计
TDSQL-C MySQL 版和云数据库 MySQL 有什么区别
相关协议
服务等级协议
服务条款
TDSQL-C 政策
隐私政策
数据处理和安全协议
通用参考
标准与认证
词汇表
联系我们

列压缩

PDF
聚焦模式
字号
最后更新时间: 2024-12-11 10:18:15

功能介绍

当前有针对行格式的压缩和针对数据页面的压缩,但是这两种压缩方式在处理一个表中的某些大字段和其他很多小字段,同时对小字段的读写很频繁,对大字段访问不频繁的情形中,在读写访问时都会造成很多不必要的计算资源的浪费。
列压缩功能可以压缩那些访问不频繁的大字段而不压缩那些访问频繁的小字段,这样不仅能够减少整行字段的存储空间,而且可以提高读写访问的效率。
例如,一张员工表:create table employee(id int, age int, gender boolean, other varchar(1000) primary key (id)),当对 id,age,gender 小字段访问比较频繁,而对 other 大字段的访问频率比较低时,可以将 other 列创建为压缩列。一般情况下,只有对 other 的读写才会触发对该列的压缩和解压,对其他列的访问并不会触发该列的压缩和解压。由此进一步降低了行数据存储的大小,使得对访问频繁的小字段能够实现更快访问,对访问频率比较低的大字段的存储空间能够实现进一步降低。

支持版本

内核版本 TXSQL 8.0 3.1.15.002及以上。
说明:
内核版本 TXSQL 8.0 3.1.15.002及以上的列压缩功能为默认开启。
内核版本 TXSQL 5.7 暂不支持列压缩功能。

适用场景

表中有某些大字段和其他很多小字段,同时对小字段的读写很频繁,对大字段访问不频繁的情形中,可以将大字段设置为压缩列。

使用说明

支持的数据类型

1. BLOB(包含 TINYBLOB、MEDIUMBLOB、LONGBLOB)。
2. TEXT(包含 TINYTEXT、MEDIUMTEXT、LONGTEXT)。
3. VARCHAR。
4. VARBINARY。
5. JSON。
语法如下:
CREATE TABLE t1(
id INT PRIMARY KEY,
b BLOB COMPRESSED
);
或者
CREATE TABLE t1(
id INT PRIMARY KEY,
b BLOB COLUMN_FORMAT COMPRESSED
);
压缩阈值(Threshold)
压缩阈值通过参数 innodb_min_column_compress_length 控制,默认为256。如果列的原 size 超过此参数的取值,则进行压缩,否则只添加压缩 header,不对数据进行实际压缩。
支持的 DDL 语法总结如下:
create table 方面:
DDL
是否继承压缩属性
CREATE TABLE t2 LIKE t1;
Y
CREATE TABLE t2 SELECT * FROM t1;
N
CREATE TABLE t2(a BLOB) SELECT * FROM t1;
N
alter table 方面:
DDL
描述
ALTER TABLE t1 MODIFY COLUMN a BLOB;
将压缩列变为非压缩列
ALTER TABLE t1 MODIFY COLUMN a BLOB COMPRESSED;
将非压缩列变为压缩列

参数说明

参数名
动态
类型
默认
参数值范围
说明
innodb_zlib_column_compression_level
Yes
UINT
6
[0-9]
zlib 压缩,0表示不压缩,1表示最快的压缩,9表示压缩程度最大的压缩,从1到9压缩速度越慢,但压缩率越高。
innodb_zstd_column_compression_level
Yes
UINT
3
[1-22]
zstd 压缩,1表示最快的压缩,22表示压缩程度最大的压缩,从1到22压缩速度越慢,但压缩率越高。
innodb_min_column_compress_length
Yes
UINT
256
[1,UINT_MAX32]
控制压缩阈值,单位:字节,如果列的原长度大于或等于此参数的取值,则进行压缩,否则只添加压缩 header,实际不对数据进行压缩。

多算法支持(Multiple Algorithms)

支持 ZLIB、LZ4、ZSTD 三种压缩算法。也可以省略算法,省略后将默认算法为 ZLIB。
语法如下:
CREATE TABLE t1(
id INT PRIMARY KEY,
b BLOB COMPRESSED ALGORITHM = [ZLIB|LZ4|ZSTD]
);
或者
CREATE TABLE t1(
id INT PRIMARY KEY,
b BLOB COLUMN_FORMAT COMPRESSED ALGORITHM = [ZLIB|LZ4|ZSTD]
);

压缩算法与压缩程度选择(Compression Algorithms and Compression Levels)

1. ZLIB:目前提供了 ZLIB 的多压缩级别,参数为 innodb_zlib_column_compression_level,值为0-9,其中0表示不压缩,1表示最快的压缩,9表示压缩程度最大的压缩,默认为6。
2. LZ4:与 MySQL 的 Page 压缩保持一致,不支持 LZ4 的多程度压缩,使用 LZ4 压缩算法时需要注意,LZ4 压缩的最大原始长度为231-1,而 LONGBLOB 的最大长度为232-1,当压缩的原始数据长度大于等于231时,将会隐式地使用 ZLIB 进行压缩。
3. ZSTD:ZSTD 即 ZStandard 有三种压缩方式。此处列压缩支持的是不含字典的非 streaming 的普通压缩,提供了多压缩级别,参数为 innodb_zstd_column_compression_level,值为1-22,1表示最快的压缩,22表示压缩程度最大的压缩,默认为3。
压缩属性显示
这里展示默认压缩算法:ALGORITHM = ZLIB。
CREATE TABLE t2 (a VARCHAR(100) COMPRESSED) ENGINE=InnoDB;

SHOW CREATE TABLE t2;

注意事项

逻辑导出方面,逻辑导出时 create table 还是会附有 Compressed 相关的关键字。因此导入时在 TDSQL-C MySQL 版内部是支持的。其他 MySQL 分支以及官方版本:
官方版本号小于8.0.22,可以直接导入。
官方版本号大于或等于8.0.22,需要在逻辑导出之后,去掉压缩关键字。
DTS 导出其他云或者用户时,在 binlog 同步过程中可能会出现不兼容的问题,此时可以跳过带压缩关键字的 DDL 语句。
物理备份方面,由于备份时其字段在 innodb 内部是已经压缩的状态,因此使用该备份的版本也必须是带有列压缩的版本。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈