清理占用
delete操作
使用delete删除的时候,MySQL并没有把数据文件删除,只会将已经删除的数据标记为删除,因此并不会彻底的释放空间。这些被删除的数据会被保存在一个链接清单中,当有新数据写入的时候,MySQL会利用这些已删除的空间再写入。删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。这些被标记为删除的记录,就是数据空洞。不仅浪费空间,还影响查询效率。
直接操作
优化方法
1、第一种方法
OPTIMIZE 适用于InnoDB和MyISAM存储引擎。 使用OPTIMIZE TABLE来重新利用未使用的空间,并重新整理数据文件的碎片。
好处:减少表数据与表索引的物理空间,降低访问表时的IO。整理之前,取数据需要跨越很多碎片空间,这时需要时间的,整理后,想要的数据都放在一起了,直接拿就拿到了,效率提高。
2、第二种方法
注意:该操作执行的时候会把该表格先写入一个tmp临时表,所以磁盘剩余空间必须大于表空间,否则会执行失败。
3、第三种方法(生产环境不建议使用)
先将整个表的结构和数据导出来,删除整个表,再创建表,最后将旧表数据重新导入新表中。
考虑问题:
实例剩余可用空间至少是需回收表的物理空间的3倍。(缩容前要留出 1 倍当前表空间中台给的建议,阿里云更靠谱)
在OPTIMIZE TABLE运行过程中,5.7.4以前的版本MySQL会锁定表。
Loading...