有没有insert into的优化方法,我用多表关联select出来的数据有五十多万条,一次性插入到一张表中的效率太差,最好有代码举例
我的核心语句是insert into tab1 select Col1,col2,col3.…from tab2 left join tab3 left join
查询出来的表有五十多万行每天,每次单独查询的时候很快,一用insert into就卡死,拆分后也不管用
以下是执行计划
![img](https://i/
有没有insert into的优化方法,我用多表关联select出来的数据有五十多万条,一次性插入到一张表中的效率太差,最好有代码举例
我的核心语句是insert into tab1 select Col1,col2,col3.…from tab2 left join tab3 left join
查询出来的表有五十多万行每天,每次单独查询的时候很快,一用insert into就卡死,拆分后也不管用
以下是执行计划
![img](https://i/
建议通过代码的方式,先查询出来,然后采用insert all的方法加上线程池的方式来优化。批量插入数据太大会报错,代码中就可以在分批。比如分X批,每批300条,mapper.xml的写法如下(实际代码)
<insert id="batchSave" parameterType="java.util.List">
insert all
<foreach collection="list" item="item" separator=" ">
INTO cj_msg(
id,type,type_id,title,detail,user_id,login_name,
status,create_by,create_date,update_by,update_date,remark,del_flag)
values
(#{item.id},#{item.type},#{item.typeId},#{item.title},#{item.detail},#{item.user.id},#{item.loginName},
#{item.status},#{item.createBy.id},#{item.createDate},#{item.updateBy.id},#{item.updateDate},#{item.remark},#{item.delFlag})
</foreach>
select ${list.size} from dual
</insert>