2小时的SQL操作,1分钟就搞定?
今天来讲讲关于大表删除的问题。
比如,你现在需要删除一张一共有5亿数据的表里面的2021年数据,假设这张表叫yes。
我相信你脑子在1s内肯定会蹦出这条SQL:deletefromyeswherecreatedate20201231andcreatedate20220101;
如果直接执行这条SQL会发生什么问题呢?长事务
我们需要关注到一个前提:这张表有5亿的数据,所以它是一张超大表,因此这个where条件可能涉及非常多的数据,所以我们可以从离线数仓或者备库查下数据量,然后我们发现这条SQL会删除3亿左右的数据。
那么一次性delete完的方案是不行的,因为这会涉及到长事务的问题。
长事务涉及到加锁,只会在事务执行完毕后才会释放锁,由于长事务锁了很多数据,如果期间有频繁的DML想要操作这些数据,那么就会造成阻塞。
连接都阻塞住了,业务线程自然就阻塞了,也就是说你的服务线程都在等待数据库的响应,然后可能还会影响到别的服务,可能产生雪崩,于是就GG了。
长事务可能会造成主从延迟,你想想主库执行了好久,才执行完给从库,从库又要重放好久,期间可能有很长一段时间数据是不同步的。
还有一种情况,业务都有个特殊停机窗口,你觉得你可以为所欲为,然后开始执行长事务了,然后执行了5小时之后,不知道啥情况抛错了,事务回滚了,于是浪费了5个小时,还得重新开始。
综上,我们需要避免长事务的发生。
那面对可能发生长事务的SQL我们怎么拆呢?拆SQL
我们就以上面这条SQL为例:deletefromyeswherecreatedate20201231andcreatedate20220101;
看到这条SQL,如果要拆分,想必很多小伙伴会觉得很简单,按日期拆不就完事了?deletefromyeswherecreatedate20201231andcreatedate20210201;deletefromyeswherecreatedate20210201andcreatedate20210301;
这当然可以,恭喜你,你已经拆分成功了,没错就这么简单。
但是,如果createdate没有索引怎么办?
没索引的话,上面这就全表扫描了啊?
影响不大,没有索引我们就给他创造索引条件,这个条件就是主键。
我们直接一个selectmin(id)。。。和selectmax(id)。。。。得到这张表的主键最小值和最大值,假设答案是233333333和666666666。
然后我们就可以开始操作了:deletefromyeswhere(id233333333andid233433333)andcreatedate20201231andcreatedate20220101;deletefromyeswhere(id233433333andid233533333)andcreatedate20201231andcreatedate20220101;deletefromyeswhere(id666566666andid666666666)andcreatedate20201231andcreatedate20220101;
当然你也可以再精确些,通过日期筛选来得到maxId,这影响不大(不满足条件的SQL执行很快,不会耗费很多时间)。
这样一来SQL就满足了分批的操作,且用得上索引。
如果哪条语句执行出错,只会回滚小部分数据,我们重新排查下就好了,影响不大。
而且拆分SQL之后还可以并行提高执行效率。
当然,并行可能有锁竞争的情况,导致个别语句等待超时。不过影响不大,只要机器状态好,执行得快,因为锁竞争导致的等待并不一定会超时,如果个别SQL超时的话,重新执行就好了。有时候要转换思路
关于大表删除有时候要转换思路,把删除转成插入。
假设还是有一张5亿的数据表,此时你需要删除里面4。8亿的数据,那这时候就不要想着删除了,要想着插入。
道理很简单,删除4。8亿的数据,不如把要的2000W插入到新表中,我们后面业务直接用新表就好了。
这两个数据量对比,时间效率差异不言而喻了吧?
具体操作也简单:创建一张新表,名为yestemp;将yes表的2000W数据selectinto到yestemp中;将yes表rename成yes233;将yestemp表rename成yes。
狸猫换太子,大功告成啦!
之前有个记录表我们就是这样操作的,就selectinto近一个月的数据到新表中,以前老数据就不管了,然后rename一下,执行得非常快。
本来预估2小时的SQL操作,1分钟就搞定了。
杨幂,别那么高傲众所周知,对明星而言,观众的印象分很重要。和蔼可亲,敬业友善。稍微上道的十八线艺人,哪怕演技不好,逢人也要做出恭恭敬敬的样子。而杨幂,作为演艺圈资深玩家,觉悟却远不如初出茅庐的新人
狂飙大结局!强盛集团法人竟是孙红雷?狂飙收官了,有没有小伙伴像橙子一样,觉得没看够的,剧组能不能再来个第二季呀!该剧一经播出,就火遍全网,因为是犯罪剧,里面有很多涉及法律问题的,各位法考的考生应该在追剧之余都能关注到
萌新向的菲谢尔养成攻略萌新(045)四星推荐真萌新(45)五星推荐萌新头子(55)现在草系来了我看你养不养狗头武器选择三星武器弹弓(站场随便用用就好)(三星始终是过渡萌新不要给太多资源了)四星武器绝弦(
三阶魔方还原5接上一期,还原顶层前的基础图案就是做出顶层黄色十字,大家只要按照上一期的公式就可以做出以黄色十字为基础的几个图案,又分为几种装甲车图案,蝴蝶结图案,坦克车图案,小鱼图案。各个图案如
能因为新立绘太丑上热搜的手游,恐怕也只有FGO了作为二次元手游的顶流之一,不得不承认FGO的玩家们包容力实在是太强了。因为能凭借新立绘太丑而冲上热搜,而且玩家们还不会当场弃坑的游戏,恐怕整个行业内也只有FGO这一家。看着这别具一
拍照哪家手机好?这四款旗舰机推荐给你,不但镜头好,配置也强悍头条创作挑战赛您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。春节后天气逐渐转暖,慢慢的外面的花就要开放了,很多人想要春游,那么就需要一款
宁波这款高速智能机器人能秒到事故现场守护往来车辆视频加载中央广网宁波2月5日消息(记者张雯雯通讯员柴育峰张雪尔)正月十五,节后春运迎来最后一波返程高峰。在宁波杭州湾跨海大桥南接线的长溪岭隧道口,一辆轿车突发故障,行驶至应急车道等
男子油炸元宵现场炸裂,元宵花灯璀璨炫耀健康2023辽宁葫芦岛的曹先生心血来潮,打算给家人小露一手,做一份炸元宵。没想到,油炸元宵的过程,现场炸裂,秒变大型翻车现场。有的元宵飞起来了,蹦出半米高,90元宵在油锅里发生了自
我的指数基金持仓2023。01话不多说,先上图收益率曲线如下有知有行的投资账本功能挺实用。感谢孟总。随着过去两个月的反弹,好多持仓品种的收益率重回正数。从目前的估值来看,A股整体上的投资价值已经不太大了。中概,
央企在哪些行业是科创排头兵?在南方周末企业科创力数据库中,共有44个一级行业分类。在哪些行业,央企的科创力更强势?从525家央企所处行业看,39个一级行业中有它们的身影,主要集中在金融,电力热力燃气及水生产与
有顾客用口水抹寿司?!日本最大回转寿司连锁店改为点餐模式(央视财经经济信息联播)最近,一段在日本知名寿司连锁店寿司郎内拍摄的寿司上抹唾液的视频在网络上热传,导致该公司的股价在一天之内暴跌近5。此事件不断发酵,让日本回转寿司行业遭遇了一次