【大厂面试题】千万级大表如何快速删除大量数据

    - 作者简介:大厂高级 Java 开发工程师
    - 称 号:CSDN 博客专家✨、阿里云博客专家
    - 公众号:云服务小管家。免费的阿里云服务器☁ 和云环境直接使用
    - 生活:专注于后端技术分享迷茫时可来瞅瞅码农轨迹‍♂️
    - 服务:提供模拟面试和简历辅导,提供生产项目。内推可私信✉
    - 卷卷群:可以和大家一起学习,一起进步
    - 如果感觉博主的文章还不错的话,请三连支持一下博主哦

背景

最近在做一个项目,除了验证功能,还需要验证性能,所以前期导入了一批数据。等发布前会把这个表给清理掉。所以涉及一个大表删除的问题。
当时我的诉求:快速删干净。

调研后的方式

方式1

不可取,因为是贼大事务,要规避

delete from tableName limit 1000W

本身就是一个大事务,没有执行过,不清楚什么后果,但是感觉后果会很严重。

方式2

delete from tableName limit 1000sleep 0.1秒 //让binlog追一下

推荐,因为这种方式可控,但是速度慢。

方式3

使用TRUNCATE 来清理表,优点如下:

  • 自增的主键会重置
  • 执行速度贼快

最终选的方式

使用TRUNCATE 来清理表,即方式3。
但是遇到了一个问题,使用TRUNCATE 没有binlog,导致下游数仓出现了问题。

结论

如果有下游消费binlog,那就要一行一行的删;如果没有下游,那么可以使用TRUNCATE

你可能感兴趣的:(【面试题】,【架构&案例】,【MySQL】,java,开源,spring,jvm,mysql,大厂,面试题)