不建议使用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
彻底删除表结构以及所有数据,包括索引、主键等,不可回滚
浙公网安备 33010602011771号