14.12.5 使用 TRUNCATE TABLE 回收磁盘空间
要在truncating一个InnoDB
table 时回收 os 磁盘空间,该 table 必须存储在其自己的.ibd文件中。若要将 table 存储在其自己的.ibd文件中,必须在创建 table 时启用innodb_file_per_table。此外,被截断的 table 和其他 table 之间不能有foreign key约束,否则TRUNCATE TABLE
操作将失败。但是,允许在同一 table 的两列之间使用外键约束。
当 table 被截断时,将其删除并在新的.ibd
文件中重新创建,并将释放的空间返回给 os。这与截断InnoDB
system tablespace中存储的InnoDB
table(在innodb_file_per_table=OFF
时创建的 table)和共享general tablespaces中存储的 table 形成对比,在共享general tablespaces中,只有InnoDB
可以在 table 被截断后使用释放的空间。
截断 table 并将磁盘空间返回给 os 的功能还意味着physical backups可以更小。截断存储在系统 table 空间(在innodb_file_per_table=OFF
时创建的 table)或常规 table 空间中的 table,会在 table 空间中留下未使用空间的块。