15.11.5 使用TRUNCATE TABLE回收磁盘空间

想要在清空一张InnoDB表时回收系统磁盘空间,这张表必须有自己的.ibd文件。要有自己的.ibd文件,在创建表时必须启用innodb_file_per_table。此外,被清空的表和其它表之间不能有外键限制,否则TRUNCATE TABLE操作会失败。但是允许同一张表两列之间的外键限制。

当一张表被清空时,它会被删除并在一个新的.ibd文件中重建,空闲空间会被返回给操作系统。这点和存储在系统表空间和通用表空间中的表形成了对比。对于后者来说,在清空一张表后,只有InnoDB能使用空闲空间。

可以清空表并将磁盘空间返还给操作系统,意味着物理备份会更小。而清空系统表空间和通用表空间中的表,会在表空间内留下大量未使用的空间。