0

我有一个使用 file_per_table 设置的 MySQL 数据库。我知道 InnoDB 对每个表都有一个单独的 .ini,但我想知道当我删除模式或删除表时是否释放了空间。我知道当我删除一个模式时我会收回空间,我想知道如果我删除一个表我会回收空间吗?

4

1 回答 1

1

是的,如果您 DROP 或 TRUNCATE 存储在单独的 .ibd 表空间文件中的表,则该空间将返回到文件系统。

示范:

$ df /var/lib/mysql
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sdb              33538048  14413988  19124060  43% /var/lib/mysql

$ sudo ls -lh /var/lib/mysql/data/imdb/name2.ibd
-rw-rw---- 1 mysql mysql 168M Apr 30 02:44 /var/lib/mysql/data/imdb/name2.ibd

mysql> drop table name2;

$ df /var/lib/mysql
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sdb              33538048  14151832  19386216  43% /var/lib/mysql

您还可以优化 InnoDB 表。这将整理数据并重建索引。如果您在该文件中浪费了大量空间,则优化后的文件将更小,并且空间平衡将返回到文件系统。

于 2013-05-17T19:19:16.163 回答