专栏名称: macrozheng
专注Java技术分享,解析优质开源项目。涵盖SpringBoot、SpringCloud、Docker、K8S等实用技术,作者Github开源项目mall(50K+Star)。
今天看啥  ›  专栏  ›  macrozheng

千万级数据的全表update的正确姿势!

macrozheng  · 公众号  · 大数据 数据库  · 2024-08-29 10:32
    

主要观点总结

文章主要介绍了在进行大数据量MySQL表更新时,如何优化主从同步的问题。文章从最初的直接update遇到的问题出发,介绍了深度分页问题以及如何通过优化SQL语句和脚本分批处理来解决该问题。同时,文章还介绍了其他相关问题如雪花算法主键、uuid的处理方式,以及mall项目的相关介绍。

关键观点总结

关键观点1: 直接update的问题

在进行大数据量的MySQL表更新时,直接执行sql语句可能会导致主从同步问题,产生大量的binlog,给从库带来写数据压力。

关键观点2: 深度分页问题

使用mysql的limit进行分批处理时,当数据量较大时,效率很低,类似于全表扫描。

关键观点3: 优化方案

通过优化SQL语句和脚本分批处理,使用关键字如/*!40001 SQL_NO_CACHE */和FORCE INDEX来优化查询效率,最终实现高效的全表更新。

关键观点4: 其他问题和解决方案

涉及到snowflake雪花算法或uuid等生成的主键处理方式,需要提前进行数据处理。同时介绍了mall项目的整体架构和全套视频教程的内容。


文章预览

mall学习教程官网: macrozheng.com 作者:呼呼虎 来源:juejin.cn/post/6897185211340029966 有些时候在进行一些业务迭代时需要我们对Mysql表中数据进行全表update,如果是在数据量比较小的情况下(万级别),可以直接执行sql语句,但是如果数据量达到一个量级后,就会出现一些问题,比如主从架构部署的Mysql,主从同步需要需要binlog来完成,而binlog格式如下,其中使用statement和row格式的主从同步之间binlog在update情况下的展示: 格式 内容 statement 记录同步在主库上执行的每一条sql,日志量较少,减少io,但是部分函数sql会出现问题比如random row 记录每一条数据被修改或者删除的详情,日志量在特定条件下很大,如批量delete、update mixed 以上两种方式混用,一般的语句修改使用statement记录,其他函数式使用row 我们当前线上mysql是使用row格式binlog来进行的主从同步, ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览