天天看点

mysql 删除数据后表占用空间还是很大

mysql 配置有一项是针对其文件存储空间使用的,Innodb_File_Per_Table,(网上挺多说5.6版本以后自动开启,但是据我观察好几个系统的mysql5.6都是没有自动开启的,甚至配置文件都没有该参数),如果该参数设置了OFF 那么就是使用文件共享空间,则删除后会保留很多空间,而设置了ON之后,会每个表会使用独立的空间,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。

问题出现原因

在删除sql语句中,写法如下:DELETE FROM 

ueb_logistics_rule_logs

 WHERE type=0 LIMIT 100; 凡是这样,delete带有where条件的,都不是真删除,只是MySQL给记录加了个删除标识,自然这样操作后表数据占有空间也不会变小了。

解决办法:

OPTIMIZE TABLE 来回收未使用的空间,并整理数据文件的碎片。

但是 OPTIMIZE TABLE只对MyISAM, BDB表起作用,。

innodb的数据库不支持optimize,可以用

ALTER TABLE tableName ENGINE='InnoDB'(前提是

innodb_file_per_table = ON

该方法会对旧表以复制的方式新建一个新表,然后删除旧表。虽然这个过程是安全的,但是在进行操作时还是先进行备份为好。

然后对表的索引信息做重新统计

analyze table tableName

继续阅读