不建议使用delete删除数据原因

1.软删除

所谓的软删除是指在表中添加一个例如isactive的字段,isactive=0表不可用,isactive=1表这条数据有效。所以可以通过update这个字段值而不是直接删除数据

2. 性能问题--行级锁

Delete/update/insert/select...for update都会增加行级锁,如果在高并发情况下会影响性能

3 增加日志开销

我们知道在对数据库操作时都会将操作写入到操作日志binlog和redolog。根据如下binlog和redolog功能,这样会影响数据备份以及数据库事务

  3.1 binlog

    binlog即数据库操作日志,是数据库的一种日志文件,用于记录数据库执行数据的修改操作(delete,update,insert)。binlog主要用于主从库间数据复制以及恢复(rollback操作)

  3.2 redolog

    redolog是InnoDB存储引擎中的一种日志文件,用于记录事务过程中对数据页的修改操作。它的功能是确保事务的持久性。在事务提交时,会先将修改操作写入redolog,然后再将数据持久到磁盘,如果系统崩溃可以通过redolog恢复未完成的事务

   参考https://blog.csdn.net/2301_78858041/article/details/147888562

4 执行delete并不会立即释放空间

delete只会标记数据为“已删除”,并不会立即释放磁盘空间,如果想要释放空间需要执行optimize table或重建表

5 数据碎片

频繁的delete会导致数据页出现很多数据碎片,降低查询性能;为了减少碎片需要定期执行optimize table或者alter table重建表

替代方案

1 软删除

2 truncate

  truncate只是删除表内数据,保留表索引 表结构。自增字段重置为初始值。

  truncate执行后立即生效不可回滚

  truncate通过释放数据页而非逐行删除

  truncate适用于需要保留表结构且快速清空数据的场景

3 drop table

彻底删除表结构以及所有数据,包括索引、主键等,不可回滚

 

posted on 2025-06-14 09:14  colorfulworld  阅读(93)  评论(0)    收藏  举报