我刚刚将几个大表从 MyISAM 转换为 InnoDB。
当我查看 phpMyAdmin 中的表时,它们显示了大量开销(一个表有 6.8GB)。
优化表(这不是 InnoDB 上支持的命令)不会像对 MyISAM 那样产生影响。
这是因为 InnoDB 的数据文件不断增长,即使在删除后也永远不会返回空间吗?如果是这样的话,我以前从未在其他 InnoDB 表中看到过这样的开销。
有办法清除它吗?
编辑:以下是我尝试过的方法(但没有成功):
- 优化表
- 按主键重新排序表
- 整理表碎片
答案1
缩小 InnoDB 数据文件的最常见方法是使用 mysqldump 进行完整备份并恢复。遗憾的是,由于 InnoDB 共享表空间的设计,未使用的表空间无法像 MyISAM 或 MS SQL 那样直接返回到操作系统。
InnoDB 的人们一直坚持认为这是一个经过深思熟虑的设计决定,但如果真是这样,那就太短视了。我完全理解不自动缩小数据文件的想法,但没有手动选项确实很烦人。
请注意,您可以配置 InnoDB 每个表空间使用一个文件。如果这样做,您应该能够单独优化表以缩小文件,因为每个表都有一个单独的表空间文件。