MySQL 8.3 Release Notes
要在截断 InnoDB
表时回收操作系统磁盘空间,表必须存储在其自己的 .ibd 文件中。要将表存储在其自己的 .ibd 文件中,innodb_file_per_table
必须在创建表时启用。此外,截断表和其他表之间不能有 外键 约束,否则 TRUNCATE TABLE
操作将失败。但是,在同一表中的两个列之间的外键约束是允许的。
当表被截断时,它将被删除并在新的 .ibd
文件中重新创建,并将释放的空间返回给操作系统。这与截断存储在 InnoDB
系统表空间 中的 InnoDB
表(在 innodb_file_per_table=OFF
时创建的表)和存储在共享 通用表空间 中的表不同,在这些情况下,只有 InnoDB
可以在表被截断后使用释放的空间。
能够截断表并将磁盘空间返回给操作系统也意味着 物理备份 可以变得更小。截断存储在系统表空间(在 innodb_file_per_table=OFF
时创建的表)或在通用表空间中的表将在表空间中留下未使用的块。