mysql - 在我的实时数据库上测试 MySQL 压缩

标签 mysql database compression innodb

我有一个巨大的表,其中有很多 VARCHARTINYTEXTTEXT 字段。由于我不是 MySQL DB 方面的专家,我最近通过查看此页面 InnoDB Table Compression 了解到 MySQL 数据库的压缩功能。 .

我搜索并阅读了多个页面,发现我需要设置以下参数并将这些更改应用到我的 my.cnf:

innodb_file_per_table=1; (this is already set)
innodb_file_format=Barracuda;

表结构:

 ...
 ROW_FORMAT=COMPRESSED
 KEY_BLOCK_SIZE=8; (possibly I need to do a trial-and-error to find a
                    better key_block_size that fits better to my case)

所以,我想首先进行测试,看看这种压缩对我的表大小有何好处,并希望更好地管理我的空间。为了进行此测试,我将生成一个包含数百或数千行原始表的示例表,并进行试验和性能测量。

由于这将是一个测试过程,而且我没有任何其他服务器可以进行测试,因此我不想冒任何风险。

这是我的问题:

如果我在当前服务器上更改我的 my.cnf 文件(通过添加 innodb_file_format=Barracuda;)并重新启动服务器,这会对我现有的表产生任何影响/data 具有 ROW_FORMAT=COMPACT

我找不到任何地方回答/提及这一点,所以提前致谢。

最佳答案

innodb_file_format 适用于新创建的表,不适用于现有表。我认为您甚至不需要重新启动。

SET GLOBAL 命令需要 root 权限,但之后您可以以普通用户身份运行。

SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=1;      -- already done
SET GLOBAL innodb_large_prefix=1;        -- optional
logout & login (to get the global values);
ALTER TABLE tbl ROW_FORMAT=COMPRESSED;   -- This assumes table exists
CREATE TABLE tbl ( ...
    )  ROW_FORMAT=COMPRESSED;            -- This assumes creating

关于mysql - 在我的实时数据库上测试 MySQL 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42239492/

相关文章:

mysql - 订购方式 * 其中 *

php - Mysql 行返回数组中的最后一个值,但我期望整行

javascript - Joomla 嵌入 JS/CC 文件

c - Zlib 解压缩 C 中未知压缩长度的字节

android - 房间数据库: Multiple delete query crashes app

python - 内存中 numpy 数组(图像、uint8)的有损压缩

php - 使用 PHP/MySQL 显示一周内发生的生日

php - 在 PHP 中通过 SSH 连接到 MySQL 服务器

mysql - 我必须在两个表之间的sql外键列中插入什么

mysql - 如何仅更改单个表的自动增量偏移量和步长值?