听朋友一个需求,根据A库的t1表数据修改B库t2表的数据,有唯一对应关系。
直接采用java代码一条一条去update,一段程序的优化之路。
最初代码如下:
程序执行10条发现没问题,开始执行100条,发现太慢了。感觉串行去修改效率不高,考虑多线程。直接上多线程代码
emmmm 是多线程,也有shutdown,代码codeview无误。执行结果太慢了。然后想看看是不是多线程,打印了执行线程id,结果发现怎么是串行的。
原来执行还是单线程,代码位置有误,for循环应该放道提交任务的外面,继续修改
打印结果是多线程,happy,解决了。执行300条数据,执行时间居然3分钟,一分钟更新100条,40万需要……
再看也看不出有什么需要修改的地方,想想修改mysql的连接数据,修改线程池数量大小,修改内容添加索引,结果没有任何变化。
看到update想到为什么要先查询在去修改呢。于是去掉查询,执行300条瞬间完成。哇……查询这么耗时。
优化思路: