Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.11 InnoDB磁盘I/O和文件空间管理  /  14.12.5 使用 TRUNCATE TABLE 回收磁盘空间

14.12.5 使用 TRUNCATE TABLE 回收磁盘空间

要在截断表 时回收操作系统磁盘空间 , InnoDB表必须存储在其自己的.ibd文件中。对于要存储在其自己的.ibd 文件中innodb_file_per_table的表,必须在创建表时启用。另外,被截断的表和其他表之间 不能有 外键TRUNCATE TABLE约束,否则操作失败。但是,允许在同一个表中的两列之间使用外键约束。

当表被截断时,它会被删除并在新文件中重新创建, .ibd释放的空间会返回给操作系统。InnoDB这与存储在 InnoDB 系统表空间 (创建时 的表)中的截断表形成对比 innodb_file_per_table=OFF,后者只能 InnoDB在截断表后使用释放的空间。

截断表并将磁盘空间返回给操作系统的能力还意味着 物理备份可以更小。截断存储在系统表空间中的表(创建时创建的表 innodb_file_per_table=OFF)会在系统表空间中留下未使用的空间块。