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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值