为什么MySQL不建议使用delete删除数据?

之前看到了一道阿里面试题,内容是:为什么MySQL不建议使用Delete取数,有大佬知道这个问题的答案吗

曾经年少轻狂的我,写过一个 delete 语句,忘记了加 where 条件……

:joy:着实是年少轻狂了

MySQL不建议使用DELETE删除数据主要是因为DELETE语句的执行过程比较耗费系统资源,因为每当DELETE语句删除一行时,MySQL会对其它的表上的索引进行更新,从而导致性能瓶颈。

此外,当使用DELETE语句时,被删除的数据只是被标记为已删除状态,而不是真正的删除,这样就会留下很多碎片空间,导致服务器磁盘空间的浪费。同时,对于大量数据的DELETE操作,也容易引起日志写满的问题。

为了解决这些问题,MySQL推荐使用TRUNCATE语句来删除数据,因为TRUNCATE语句会将表中的全部数据立即删除,不会遗留任何碎片空间,也不会写入事务日志,因此可以在短时间内快速清空表中的数据,并释放系统资源。

需要注意的是,TRUNCATE语句删除数据时是不可逆的,一旦执行就无法恢复,因此在使用TRUNCATE语句时需要谨慎处理,而且仅仅适用于清空整张表的场景,不适用于删除部分数据的情况

作者:nues
链接:阿里面试:为什么MySQL不建议使用delete删除数据? - 知乎
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。