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

15.11.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)或通用表空间中的表会在表空间中留下未使用的空间块。