使用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
)或常规表空间中的表,会将表空间中未使用的空间块保留下来。