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