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

白色玫瑰 程序猿

时间: 2023-07-11 阅读: 1 字数:2841

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

目录

<a href="https://github.com/Nagisazz">欢迎访问github</a>

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

就效率而言,单纯的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>
  1. 取消mybatis的日志打印,有时候这个也会极大影响速度。

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

原文地址:https://blog.csdn.net/Nagisazz/article/details/84334225?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168904449916800185828444%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168904449916800185828444&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-13-84334225-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/65204062a9154ad89f652c3f8a3412e6
最新评论
当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复