数据库表删除,表空间没有回收
当使用DELETE语句删除表数据时,MySQL并没有把数据文件删除,而是将数据文件的标识位删除,没有整理文件,因此不会彻底释放空间。被删除的数据将会被保存在一个链接清单中,当有新数据写入的时候,MySQL会利用这些已删除的空间再写入。删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。
为了回收表空间,可以执行OPTIMIZE TABLE语句。执行OPTIMIZE TABLE的时候,会导致锁表,而且没有必要每次DELETE之后都执行,一个月定时清理下即可。另外,OPTIMIZE操作会导致锁表,建议在访问量小的时候执行。
另外,如果需要收缩表空间,可以尝试重建表。新建一个与表A结构相同的表B,然后按照主键ID递增的顺序,把数据一行一行地从表A里读出来再插入到表B中。用表B替换A,从效果上看,就起到了收缩表A空间的作用。可以使用ALTER TABLE A ENGINE=InnoDB命令来重建表。MySQL会自动完成转存数据、交换表名、删除旧表的操作。
如有侵权请及时联系我们处理,转载请注明出处来自
推荐文章
科技快看 网站地图广州壹创集信息科技有限公司 版权所有 粤ICP备2021122624号