Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Reclaiming Disk Space with TRUNCATE TABLE

17.11.5 使用 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 时创建的表)或在通用表空间中的表将在表空间中留下未使用的块。