我的表是使用 InnoDB 行压缩 ( ENGINE=InnoDB ROW_FORMAT=COMPRESSED
) 创建的。现在我将它们更改为页面压缩。根据 MariaDB 的官方文档,启用页面压缩仅影响新创建的表。
因此,我创建了一个副本表并使用INSERT INTO SELECT
.
我想知道ALTER
表是否可以更改压缩类型(从行到页)?
我们可以ALTER
使用普通表来使用页面压缩
ALTER TABLE t1 PAGE_COMPRESSED=1;
我的问题是关于删除ROW_FORMAT=COMPRESSED
和添加PAGE_COMPRESSED=1
.
我尝试了不同的方法并阅读了很多文章。这样做的标准方法是
但是,这将保留
KEY_BLOCK_SIZE
在所有键上。有人说这只是
SHOW CREATE TABLE
显示,作为KEY_BLOCK_SIZE=8
键的最大块大小的标准,但值正是COMPRESSED
表的值。如果表是用 来创建的,解压后KEY_BLOCK_SIZE=1
会有键。KEY_BLOCK_SIZE=1
另一方面,有些人说这个错误已在 MySQL 8 中修复,但我确认它存在于 MariaDB 10.5.9 中。
判决
ALTER
是一种干净的方式,但我赞成INSERT INTO SELECT
有两个原因:INSERT
将压缩的页写入磁盘。