MySQL数据库中删除数据有哪些方法

MySQL数据库中删除数据有哪些方法

在项目中遇到一个事情,我们同步所有监控主机的切片数据,大概1千台服务器的样子,每天的数据有十几万,刚开始数据查询还挺快,数据量越多查询效率就越慢。在同步数据的时候binlog也是比较大的,一段时间就把数据的存储耗尽了。于是就采取了,将这个数据放在另外的一个schema,并保留一段时间的数据。

在迁移过程中先将数据dump

dump的命令

mysqldump -h地址 -P端口 -uroot -p 数据库名 表1 表2  > 存储的文件名.sql
再去另外一个schema回退
mysql -u用户名 -p -h地址 -P端口 数据库名 < 存储的文件名.sql

这样数据就迁移完成,虽然耗时,但也是比较快的,几分钟内可是搞完,在可接受范围内,问题又来了。

  1. 原表数据删除怎么删除呢?
  2. delete、truncate、drop想到了这三种方式
  3. 这三种方式哪个速度快?
  4. 会不会记录在binlog?如果记录在binlog,那磁盘又会很大

于是在网上查了查做个对比
MySQL删除数据有三种

  1. delete:删除行数据
  2. truncate:删除表数据
  3. drop:整表删除

是否可以恢复

这些的区别在于delete是按照行进行删除的,通常在删除的时候添加where语句,delete的删除是有事务处理的,将信息记录在binlog中,通过一定的工具是可以被还原的,数据比较安全。
truncate删除整表,操作不会进存储,不能进行回滚的
drop删除整表,不能被回滚,把整个表的数据文件删除

删除速度对比

当数据量非常的时候,速度有明显的差别,删除速度由快到慢drop>truncate>delete 

表结构的变化

delete 保留原有表结构,只会删除数据,不会释放文件高水位
truncate 保留表结构,会释放文件的高水位,实际上是把.ibd文件删掉了,再建一个。
drop 不保留表结构,数据文件被删除

忽然间想到了truncate后自增主键id又从1开始了,小编又被自己的菜蠢哭了。他基于这些理论开始去实践了,似乎发现了新大陆的样子。

参考自: truncate和delete的区别

数据库–关于truncate和delete的区别

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值