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