MySQL数据库中删除数据有哪些方法
MySQL数据库中删除数据有哪些方法
在项目中遇到一个事情,我们同步所有监控主机的切片数据,大概1千台服务器的样子,每天的数据有十几万,刚开始数据查询还挺快,数据量越多查询效率就越慢。在同步数据的时候binlog也是比较大的,一段时间就把数据的存储耗尽了。于是就采取了,将这个数据放在另外的一个schema,并保留一段时间的数据。
在迁移过程中先将数据dump
dump的命令
mysqldump -h地址 -P端口 -uroot -p 数据库名 表1 表2 > 存储的文件名.sql
再去另外一个schema回退
mysql -u用户名 -p -h地址 -P端口 数据库名 < 存储的文件名.sql
这样数据就迁移完成,虽然耗时,但也是比较快的,几分钟内可是搞完,在可接受范围内,问题又来了。
- 原表数据删除怎么删除呢?
- delete、truncate、drop想到了这三种方式
- 这三种方式哪个速度快?
- 会不会记录在binlog?如果记录在binlog,那磁盘又会很大
于是在网上查了查做个对比
MySQL删除数据有三种
- delete:删除行数据
- truncate:删除表数据
- drop:整表删除
是否可以恢复
这些的区别在于delete是按照行进行删除的,通常在删除的时候添加where语句,delete的删除是有事务处理的,将信息记录在binlog中,通过一定的工具是可以被还原的,数据比较安全。
truncate删除整表,操作不会进存储,不能进行回滚的
drop删除整表,不能被回滚,把整个表的数据文件删除
删除速度对比
当数据量非常的时候,速度有明显的差别,删除速度由快到慢drop>truncate>delete
表结构的变化
delete 保留原有表结构,只会删除数据,不会释放文件高水位
truncate 保留表结构,会释放文件的高水位,实际上是把.ibd文件删掉了,再建一个。
drop 不保留表结构,数据文件被删除
忽然间想到了truncate后自增主键id又从1开始了,小编又被自己的菜蠢哭了。他基于这些理论开始去实践了,似乎发现了新大陆的样子。
参考自: truncate和delete的区别
数据库–关于truncate和delete的区别