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 wcaccounts
		
			
				
					when id=#{item.id} then #{item.creators}
				
			
			
				
					when id=#{item.id} then #{item.deptIds}
				
			
		
		where id in
			
			#{item.id}
		
	

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

 

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

你可能感兴趣的:(JAVA 大数据迁移时优化数据库更新操作)