相关文章推荐
打篮球的领带  ·  python mysql ...·  4 周前    · 
失落的金鱼  ·  Tableau如何连接Mysql数据库-百度经验·  4 周前    · 
有腹肌的香烟  ·  Mysql select ...·  4 周前    · 
飘逸的炒饭  ·  如何使用并发控制CCL规则_云数据库 ...·  3 周前    · 
小眼睛的毛豆  ·  python将mysql表数据同步到clic ...·  3 周前    · 
儒雅的手电筒  ·  java读取文件并存为blob_java ...·  5 月前    · 
有胆有识的人字拖  ·  webflux ...·  6 月前    · 
绅士的书包  ·  正则法则 剔除非字符和非数字 - CSDN文库·  9 月前    · 
不羁的勺子  ·  GetDiscoveryDocumentAs ...·  1 年前    · 
坏坏的牛排  ·  自定义 Strapi v4 Admin ...·  1 年前    · 
Code  ›  MySQL异步删除大表的方法开发者社区
索引 delete mysql创建表 mysql
https://cloud.tencent.com/developer/article/2158846
发财的煎饼果子
1 年前
作者头像
胖五斤
0 篇文章

MySQL异步删除大表的方法

原创
前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 一涨知识胖五斤 > MySQL异步删除大表的方法

MySQL异步删除大表的方法

原创
作者头像
胖五斤
发布 于 2022-11-10 17:33:03
1.7K 0
发布 于 2022-11-10 17:33:03
举报

背景

在MySQL中有大表需要清理,该表超过100GB,不敢直接delete或者truncate、drop,怕影响业务。

delete、truncate、drop的区别

一般情况下(少量数据),不同的场景可以选择不同的方式来做数据删除。

  1. 删除指定的部分数据,使用delete from xxx where ...
  2. 删除所有数据(只是删除数据,需要保留表结构),那么建议使用truncate命令,比直接delete快.
  3. 删除整个表,使用drop table命令.

delete

delete命令逐行删除数据,涉及行锁,删除多条数据时性能差.

drop

drop命令会删除表数据及结构、触发器、分区等。

drop命令会持有buffer pool的锁,还涉及ibd磁盘文件的删除。表越大持有锁的时间越长,IO资源消耗越大,会影响在线业务。

truncate

truncate命令清除整个表的数据,需要执行人有drop权限。

  • truncate相当于把表drop掉然后重新创建一张新表。
  • truncate成功后,不会返回具体删除的数据行数。
  • truncate时数据和索引文件都会重建。

三者的区别

  • truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚。
  • truncate只能作用于表;delete,drop可作用于表、视图等。
  • truncate会清空表中的所有行,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等。
  • truncate会重置表的自增值;delete不会。
  • truncate不会激活与表有关的删除触发器;delete可以。
  • truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。

常见的大表删除方式

对于大表的场景,常见的做法:

  1. 小批量、分批删除; 由于直接使用delete,是逐步删除,直接delete不带where条件肯定是不科学的。因此,可以通过分批delete的方式,建议where条件中最好带上主键或者是索引,加速删除的效率。但对于大表来说,这种方式性能太低。
  2. 创建新表,切换旧表,drop旧表;
create table new_table like old_table ;
rename table old_table to old_table_del ;
 
推荐文章
打篮球的领带  ·  python mysql 插入datetime_mob64ca12db3721的技术博客_
4 周前
失落的金鱼  ·  Tableau如何连接Mysql数据库-百度经验
4 周前
有腹肌的香烟  ·  Mysql select 、update运行超时解决方案 - Kevin_Zhou_9
4 周前
飘逸的炒饭  ·  如何使用并发控制CCL规则_云数据库 RDS(RDS)-阿里云帮助中心
3 周前
小眼睛的毛豆  ·  python将mysql表数据同步到clickhouse里面_mob649e815cb099的技术博客_
3 周前
儒雅的手电筒  ·  java读取文件并存为blob_java file转blob-CSDN博客
5 月前
有胆有识的人字拖  ·  webflux RouterFunction方式下载文件demo_mono<serverresponse> 下载-CSDN博客
6 月前
绅士的书包  ·  正则法则 剔除非字符和非数字 - CSDN文库
9 月前
不羁的勺子  ·  GetDiscoveryDocumentAsync:“提供了无效的请求URI。请求URI必须是绝对URI,或者必须设置BaseAddress。”-腾讯云开发者社区-腾讯云
1 年前
坏坏的牛排  ·  自定义 Strapi v4 Admin Dashboard 页面 - 掘金
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号