【发布时间】:2023-03-27 20:18:01
【问题描述】:
我有一个包含许多 NULL 值的 BLOB 字段的大表。我启用了多个表空间并为每个表获取了一个单独的 ibd 文件。这个表的物理大小远远大于我自己计算的大小,所以我的结论是应该可以缩小这个 ibd 文件,但我仍然无法做到这一点,即使在重新加载转储文件之后。我验证了转储文件确实包含插入 NULL 值的 SQL 语句。 缩小此表的物理大小的任何提示?还是因为 MySQL 为 blob 分配了固定大小,所以这是不可能的?
【问题讨论】:
-
我以为我已经尝试将 ROW_FORMAT 设置为 COMPACT 并且没有工作,但现在它正在工作。 Antelope 和 Barracuda 文件格式都收缩文件: ALTER TABLE DOC ENGINE=InnoDB ROW_FORMAT=COMPACT;但即使我只是说:ALTER TABLE DOC ENGINE=InnoDB;
-
在启用多个表空间后,您显然尝试过 OPTIMIZE TABLE?从 SQL 转储重新导入时,您可能还需要手动删除文件。
-
根据the doc,MySQL 不应该为可变长度列分配固定数量的磁盘。从 SHOW TABLE STATUS 发布数据。