当DELETE后面跟条件的时(delete加上where条件)的删除都不是真删除,在删除数据的时候,mysql并没有把数据文件删除,而是将数据文件的标识位删除,没有整理文件,因此不会彻底释放空间。
被删除的数据将会被保存在一个链接清单中,当有新数据写入的时候,mysql会利用这些已删除的空间再写入。删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。
- DELETE后面跟条件的时删除数据后,数据表占用的空间大小不会变
- 不跟条件直接delete的时候清除了数据,同时数据表的空间也会变为0
解决:
-- 执行完delete语句后执行 OPTIMIZE TABLE your_table;
执行OPTIMIZE TABLE时,MySQL会锁定表,而且没有必要每次delete之后都执行,一个月定时清理下即可。在访问量较少的时间段进行