又来请教了,关于JDBC批量update语句

田小瘦 2018-08-21 02:32:12
如题:


我说一下我大概的方式, 首先查询出来10万条数据(rs),然后遍历这个rs获取每条的code去查询需要的信息返回rs1,然后再把rs1查询到的数据update到每一条数据当中去,也就是会有10万条update语句,虽然使用了addBatch,但是一次性执行10万条update语句还是很慢,各位大神有其他建议吗? 我也想过直接用存储过程来,我想非不得已了再考虑存储过程,谢谢大家指导.
...全文
1221 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_41498541 2018-08-24
  • 打赏
  • 举报
回复
也有这样的疑问
qq_42995954 2018-08-23
  • 打赏
  • 举报
回复
不能使用insert into select? 几十万数据也是瞬间刷出来啊
verejava 2018-08-23
  • 打赏
  • 举报
回复
​JDBC 预编译 增删改查

http://www.verejava.com/?id=1715771977132
maradona1984 2018-08-22
  • 打赏
  • 举报
回复
还有的话,你这算IO密集型操作,瓶颈在IO,不在CPU,可以考虑使用多线程处理数据,fork/join什么的可以了解下
maradona1984 2018-08-22
  • 打赏
  • 举报
回复
查询10W条数据本来就很慢,网络IO耗时是大头
批量更新也是网络IO耗时是大头,但更新前你查询数据库了,这个地方可以优化一下,比如用in查个1000条(oracle有999条的限制,当然我不清楚最近的oracle版本是否去掉这个限制),然后再批量update,你这样减少了999次连接数据库查询,效率会有极大提升
nayi_224 2018-08-22
  • 打赏
  • 举报
回复
别想着用java了,现在就已经是不得已的情况了。
10W的数据对于数据库来说并不多,没必要在过程中分批update。只需要一条简单的update语句就行了。至于执行时间,大概也就几秒。
而你要在java中写的话,先不说多消耗的那些io,你就是单独在数据库中执行10W条语句,也会对数据库性能造成影响。我记得mysql的update好像还有锁,分步长时间执行也会带来不少问题。而且你现在的代码的事务也有问题。
所以说,数据库的问题为什么不用数据库去解决呢。
zzxiaoma 2018-08-22
  • 打赏
  • 举报
回复
看能不能通过sql直接修改,数据多,一天一天更新就是慢
tianfang 2018-08-21
  • 打赏
  • 举报
回复
使用etl工具做 。查询,处理,再提交回数据库

https://community.hitachivantara.com/docs/DOC-1009855-data-integration-kettle
田小瘦 2018-08-21
  • 打赏
  • 举报
回复
引用 2 楼 qq_21976267 的回复:
因为不知道具体的算法是啥样的,所以没啥好的思路,我的想法就是一次性将两个数据集合rs和rs1都取出来,然后在内存中整理,最后在批量更新,避免多次查询。应该会快一丢丢


我看了日志,也通过navicat查看了mysql的语句监控, 其实查询都很快, 就到了executeBatch之后, mysql本质也是一条一条的去执行update语句,只是比单独的快很多,但是毕竟有10万条,所以也很慢, 我看了别人也有分批量去executeBatch的,比如每1000条就执行一次executeBatch, 主要对这种的存储过程不熟悉,实在不行也得去研究了.
greadworld 2018-08-21
  • 打赏
  • 举报
回复
因为不知道具体的算法是啥样的,所以没啥好的思路,我的想法就是一次性将两个数据集合rs和rs1都取出来,然后在内存中整理,最后在批量更新,避免多次查询。应该会快一丢丢
田小瘦 2018-08-21
  • 打赏
  • 举报
回复
麻烦各位大神给个思路.

67,511

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧