如果你将两万条命令行删到只剩一行,列表中有用的内容将只占二十字节,但MySQL在读取中会仍然将其视同于一个容量为四十万字节的列表进行处理,并且除二十字节以外,其它空间都被白白浪费了。
 
这在实际项目中经常会见到,也是我们可以控制的。
 
先可以用 命令:
show table status from tablename\G;
 
看看显示出来的东东。
  1. Name: tablename 
  2.          Engine: MyISAM  
  3.         Version: 10  
  4.      Row_format: Dynamic 
  5.            Rows: 2  
  6.  Avg_row_length: 20  
  7.     Data_length: 60  
  8. Max_data_length: 281474976710655  
  9.    Index_length: 1024  
  10.       Data_free: 20  
  11.  Auto_increment: NULL 
  12.     Create_time: 2011-02-23 14:55:27  
  13.     Update_time: 2011-02-23 15:07:49  
  14.      Check_time: NULL 
  15.       Collation: latin1_swedish_ci  
  16.        Checksum: NULL 
  17.  Create_options:   
  18.         Comment:   
  19. 1 row in set (0.00 sec)  
可以看到,这里查出来的分析里面有个叫Data_free,这就叫做碎片。
现在我们要把它清理掉,进行一下修正:
optimize table tablename;
 
这样子,就把datafree去掉了,可以再用show table status from table\G;看看data_free的数值,应该已经是0了