mysql 不建议delete?

1.mysql delete物理删除既不能释放磁盘空间。

MySQL内部不会真正删除空间,而且做标记删除,即将delflag:N修改为delflag:Y,commit之后会会被purge进入删除链表,如果下一次insert更大的记录,delete之后的空间不会被重用,如果插入的记录小于等于delete的记录空会被重用.

2.会产生大量碎片

导致索引频繁分裂,影响SQL执行计划的稳定性,同时在碎片回收时,会耗用大量的CPU,磁盘空间,影响表上正常的DML操作。

碎片的回收

对于InnoDB的表,可以通过以下命令来回收碎片,释放空间,这个是随机读IO操作,会比较耗时,也会阻塞表上正常的DML运行,同时需要占用额外更多的磁盘空间,对于RDS来说,可能会导致磁盘空间瞬间爆满,实例瞬间被锁定,应用无法做DML操作,所以禁止在线上环境去执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,如果你误删除了数据,可以通过以下方法尝试恢复: 1. **二进制日志(binlog)恢复**:MySQL自5.6版本开始启用二进制日志,如果开启了并设置为同步模式(`binlog_format=ROW` 或 `STATEMENT`),并且在删除操作后有备份日志,可以通过`pt-query-digest`、`mysqlbinlog`工具读取binlog文件,然后使用`REPLACE INTO`或`INSERT INTO ... ON DUPLICATE KEY UPDATE`语句将数据恢复。 2. **事务回滚**:如果是在事务中执行的删除操作,并且事务尚未提交,可以通过`ROLLBACK`命令撤销该操作。但请注意,一旦事务被提交,数据将无法恢复。 3. **InnoDB存储引擎的行级恢复**:InnoDB存储引擎提供了一定程度的行级恢复能力,使用`SHOW ENGINE INNODB STATUS`查看最近的undo logs信息,可能能从中找到已删除的行。但这种方法需要对数据库的内部结构有深入理解,并且不是所有情况下都能成功。 4. **物理备份恢复**:如果你有完整的数据库物理备份,可以通过恢复备份来获取被删除的数据,但这通常只适用于数据量较小的情况。 5. **使用第三方工具**:市面上有一些专门用于数据恢复的商业工具,如Percona Toolkit中的`pt-logical-read`等,可以帮助恢复部分数据。 需要注意的是,上述方法并非万无一失,数据恢复的成功取决于多种因素,包括但不限于事务状态、日志记录的完整性以及是否进行了额外的操作。如果数据非常重要,建议定期备份,以便在必要时进行数据恢复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值