第一时间获取技术干货和业界资讯!

这个话题有点夸张,但其实也是非常现实的问题。你会增删改查,是不是就会了 MySQL 一个道理。

今天我要说的这个问题是,你会了 MySQL 的 Delete 语法,会写 delete 语句是不是就一定会删数据了?我们先来看一个例子。

假设现在有一张表,需要删除前 1 万条数据。有下面三种SQL语句,你会选择哪一个?为什么?

估计很多人会选择方案1吧。因为,一条 SQL 语句能搞定的事,何必拆开呢?而且平时就是这样用的。

问题是方案1你在本地,测试环境用并没什么毛病。但是如果在生产环境用,你想想看,这是不是一个长事务,大事务。会不会阻塞其他的操作?会不会导致系统崩溃?

虽然看起来 SQL 语句没写错。简单、有效、粗暴,但是,事务相对较长,则占用锁的时间较长,会导致其他客户端等待资源时间较长。严重一些的说,这个操作可能会导致其他很多操作超时,继而扩大危害。我们电商系统就发生过一次类似的事情,客服电话瞬间挤爆!

再说方案2,每次删除 500 条数据,看起来实现的比较复杂,但是安全,可靠。串行化执行,将相对长的事务分成多次相对短的事务,则每次事务占用锁的时间相对较短,其他客户端在等待相应资源的时间也较短。这样的操作,同时也意味着将资源分片使用(每次执行使用不同片段的资源),可以提高并发性。

方案3,开一堆线程。人为自己制造锁竞争,加剧并发量。多个事务会对同一行产生锁竞争,消耗cpu资源。CPU 可能会在瞬间飙高。

所以说,不要固执的认为 delete 语句很简单。上面三种方案至于选哪一种方案要结合实际场景,综合考虑各个因素吧,比如表的大小,并发量,业务对此表的依赖程度等。

另外,上面 3 个 delete 语句,我们平时都不常见。而且平时也不应该这样写,删除数据,要先把 id 找出来,再根据 id 来进行删除。


面试的时候出这个题:“假设现在有一张表,需要删除前 1 万条数据?”,你别一下子就把方案1直接拿出来。这样你就死定了,去年我们就有这样的面试题,不少人掉坑里!
其实编程最重要的是思考和思想,而不是写代码!你是否认同?请留言。最后打个小广告,想买极客时间学习课程的请加我微信号:xttblog,所有课程都有返现!

©著作权归作者所有:来自51CTO博客作者mob604756f06ed8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 腾讯大牛亲授 Web前后端漏洞分析与防御技巧
  2. Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式
  3. Flutter从入门到进阶 实战携程网App
  4. 2020 重学C++ 重构你的C++知识体系
  5. 超赞!墙裂推荐一个 MySQL 自动化运维工具!
  6. Python 循环语句
  7. Python While 循环语句
  8. 小白专属mysql入门
  9. Cosmos DB的5种事物一致性

随机推荐

  1. Linux性能优化(十六)——中断绑定
  2. 在 JavaScript 中新的绘图思路[每日前端
  3. 来B站一年,我活成了人的模样!
  4. jQuery自定义样式下拉框,支持分组、多选和
  5. HTML5 3D立体图片相册
  6. Linux性能优化(十五)——CPU绑定
  7. HTML5弹性切换焦点图动画
  8. 转行的路,走起来其实有点累...
  9. 我的常用软件大公开!
  10. [每日前端夜话0xBB]