我有一个巨大的表,其中有很多 VARCHAR
、TINYTEXT
和 TEXT
字段。由于我不是 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/