JAVA 大数据迁移时优化数据库更新操作

欢迎访问github

 

最近由于公司项目版本升级,库也有较大的改动,以前的数据需要迁移到新库中,其中又多了许多关联关系。

就效率而言,单纯的SQL是最快的,只要索引建好了left join也不会太过影响速度,但是遇到SQL解决不了的复杂关系时还是需要借助程序去更新,这时候就要进行一定的优化处理。

总结一下

1. 能用SQL直接运行就直接运行。

2. 合并多余的查询,其实有时候查询比更新的操作还要慢,不要怕多几个left join,索引建好,一切ok。

3. @Transactional注解尽量只用在更新上,就是单独把更新操作拉出来,加个事务上去。

4. 更新不要一条一条更新,即使有连接池也会影响速度,解决方法有两种,

一种是批量提交,mybatis中就是用for each一下提交多条SQL语句,这种方法需要在数据库连接属性加上allowMultiQueries=true,如spring.datasource.url=jdbc:mysql://192.168.0.88:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true

还有一种是case when的方法,如

<update id="moveUsers" parameterType="java.util.List">
	update wcaccounts
		<trim prefix="set" suffixOverrides=",">
			<trim prefix="creators = case " suffix=" end,">
				<foreach collection="accounts" item="item" index="index">
					when id=#{item.id} then #{item.creators}
				</foreach>
			</trim>
			<trim prefix="dept_ids = case " suffix=" end,">
				<foreach collection="accounts" item="item" index="index">
					when id=#{item.id} then #{item.deptIds}
				</foreach>
			</trim>
		</trim>
		where id in
			<foreach collection="accounts" item="item" index="index"
			open="(" close=")" separator=",">
			#{item.id}
		</foreach>
	</update>

5. 取消mybatis的日志打印,有时候这个也会极大影响速度。

 

做完这五点,更新效率应该可以得到显著的提升。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值