golang如何大量修改mysql表里的属性?

本文探讨了使用Go语言处理大规模数据库更新的两种方法:利用Channel控制协程并发及通过导出SQL脚本批量导入。对比了两种方案的效率与适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在公司遇到的问题是,修改source=3的表中的guid属性,总共涉及的数据有400w条,开发的语言是golang,一开始使用的方式是Channel,属于go语言的并发特有的方式。
Channel是Go中一个核心类型,相当于管道,用于同步时接受和发送数据。
所以方式一就是使用Channel来控制协程,每一个协程用来先update数据,然后使用Channel限制并发数,从而来加快update的速度,但是速度没有那么快,比较消耗时间。400w数据大概需要2~3个小时才能够update结束,所以是比较消耗时间的。
第二种方式采用的通过导出sql语句到txt文件,然后再到数据库进行导入sql文件的方式,时间相对较快,在数据库中修改10w条数据只需要1m左右,但是存在的一个问题就是生成sql脚本写到txt的时候太慢了,400w条数据,写一个文件10到20w的时候很快,但是当写到txt文件的数据超过30w时,速度开始变慢,所以使用1个txt文件写完400w数据是不大科学的,最后采用了分批的方式,每50w个sql语句写到一个txt文件中,总共写8个txt文件,导出txt文件大概花了30分钟左右,速度还算快,导出sql脚本到txt文件的时候,注意一定要使用缓冲字节流写文件,速度会快一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WalkerShen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值