背景知识
我们知道MySQL有两种删除操作:delete和truncate。
二者之间是否一样,且看以下内容:
操作名称 | 操作简介 |
---|---|
delete | DML中的一种,操作对象是记录,即table中的一行,可恢复,速度慢 |
truncate | DDL中的一种,操作对象是表,即table本身,不可恢复,速度快 |
有了以上基本认识后,在使用过程中,可能会遇到什么情况呢?
情况说明
当你执行了一条delete语句,比如:
delete from emp where name='小明';
此刻,会发生什么? 答案是仅对数据记录做了一个标记,在物理层并没有真正删除。
那么会造成什么问题? 显而易见,存储依然占用,资源浪费。
应如何实现既删除了数据,又释放了存储空间呢?
优化方向
第一种:
delete from emp where name='小明'; --第一步执行删除
optimize table emp; --第二步释放空间
第二种:
delete from emp where name='小明'; --第一步执行删除
alter table emp engine='InnoDB';--第二步重建表