MySQL 清除表空间碎片
1 碎片产生的原因
- 表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白、被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大;
- 当执行插入操作时,MySQL会尝试使用空白空间,但如果某个空白空间一直没有被大小合适的数据占用,仍然无法将其彻底占用,就形成了碎片;
- 当MySQL对数据进行扫描时,它扫描的对象实际是列表的容量需求上限,也就是数据被写入的区域中处于峰值位置的部分;
2 碎片查询
查询某数据库的所有表空间:
1 | select |
查询某表的所有空间占用情况:
1 | select table_name,engine,table_rows,data_length+index_length length,DATA_FREE/1024/1024 as data_free from information_schema.tables where table_name='表名'; |
3 碎片清理
myisam存储引擎回收碎片
1 | optimize table 表名1,表名2,表名3,表名4; |
innodb存储引擎回收碎片
1 | alter table 表名 engine=innodb; |