前言:设置启动选项 innodb_file_per_table 即可启用独立表空间。不过,InnoDB总是需要共享标空间,.ibd文件对InnoDB不足以去运行,共享表空间包含熟悉的ibdata文件,InnoDB把内部数据词典和未作日志放在这个文件中。
测试环境:Windows XP, MySQL 6.0.0-alpha-community-nt-debug
先来查看一下该表的状态:
mysql> SHOW TABLE STATUS LIKE 'yejr'\G *************************** 1. row *************************** Name: yejr Engine: InnoDB Version: 10 Row_format: Compact Rows: 162049 Avg_row_length: 80 Data_length: 13123584 Max_data_length: 0 Index_length: 28983296 Data_free: 0 Auto_increment: NULL Create_time: 2007-09-13 21:58:53 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: InnoDB free: 4096 kB
该表空间文件大小:
D:\.....data\test>dir yejr.ibd 2007-09-13 22:18 50,331,648 yejr.ibd
清空该表:
mysql> TRUNCATE TABLE yejr;
现在,再来看看它的状态:
mysql> SHOW TABLE STATUS like 'yejr'\G *************************** 1. row *************************** Name: yejr Engine: InnoDB Version: 10 Row_format: Compact Rows: 0 Avg_row_length: 0 Data_length: 16384 Max_data_length: 0 Index_length: 49152 Data_free: 0 Auto_increment: NULL Create_time: 2007-09-13 21:58:53 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: InnoDB free: 45056 kB
以及表空间文件大小:
D:\.....data\test>dir yejr.ibd 2007-09-13 22:18 50,331,648 yejr.ibd
可以看到,表空间文件没有发生变化,因为InnoDB不会自动收缩表空间文件尺寸,但是实际空间却是释放出来了。
那么,如果我们想让InnoDB表空间文件也释放,该怎么办呢?
很简单,执行下面的语句,然后再看看:
那么,如果我们想让InnoDB表空间文件也释放,该怎么办呢?
很简单,执行下面的语句,然后再看看:
mysql> OPTIMIZE TABLE yejr;
mysql> SHOW TABLE STATUS like 'yejr'\G *************************** 1. row *************************** Name: yejr Engine: InnoDB Version: 10 Row_format: Compact Rows: 0 Avg_row_length: 0 Data_length: 16384 Max_data_length: 0 Index_length: 49152 Data_free: 0 Auto_increment: NULL Create_time: 2007-09-16 15:07:28 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: InnoDB free: 0 kB
以及表空间文件大小:
D:\.....data\test>dir yejr.ibd 2007-09-16 15:10 147,456 yejr.ibd
可以看到,不只是可用空间,包括表空间文件的尺寸都释放了。
另外,也可以执行一个所谓的 NULL 操作来达到同样的目的:
另外,也可以执行一个所谓的 NULL 操作来达到同样的目的:
mysql> ALTER TABLE yejr ENGINE = InnoDB;
本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/308544,如需转载请自行联系原作者