weixin_37833693
weixin_37833693
采纳率0%
2021-03-09 14:55

将T表数据同步插入到G表,T表有一百万条数据,G表有两千万数据,怎么优化?

INSERT INTO GOV_PROBLEM (
    ID,TABLE_NAME,PROBLEM_ID,S_KEY,S_ORG_NO,X_ORG_NO,B_ORG_NO,S_TIME,S_USER,GZID,PC,JCJG,SJLY,YXBZ,ORG_NEW, X_ORG_NEW,B_ORG_NEW,SJC,POST_ID,PUSH_USER,UPDATE_TIME,CHANGE_TIME,CHANGE_MARK, SYSTEM_NAME,CJID,CJMC,GZMC,GD_STATUS,S_KEY_DATA,SYN_TIME 
) 
SELECT CONCAT(#{key},TT.ID),#{tableName},TT.*,NOW() FROM ( 
    SELECT T.* FROM ORIGINAL_PROBLEM T WHERE NOT EXISTS (
        SELECT 1 FROM GOV_PROBLEM G WHERE G.PROBLEM_ID=T.ID AND G.TABLE_NAME=#{tableName}
    ) !=0 
)TT

这是操作的SQL,有一百多个表的数据需要同步到【GOV_PROBLEM】G表中,因为是源数据在另外一个连接中,所以我只能先把远程库的源数据的表的数据插入到【ORIGINAL_PROBLEM】T表中,然后再用T表数据对比G表数据(T、G表结构差不多,G表多几个扩展字段),如果T表中有G表中没有的数据,就给插入到G表中。

源数据写入到T表速度还挺快,40W数据写入也是分分钟的事,但是执行这个SQL的时候就巨慢,40W数据能执行好几个小时,但是不知道怎么优化了

(T.ID和G.PROBLEM_ID是两表主键,G.TABLE_NAME字段无索引,两个表都30多个字段,服务器空间也充足,而且我单独执行里面的查询语句也是非常非常慢,不知道怎么优化,望大神看到后不吝赐教)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • technologist_08 CSDN技术专家团—wangjie 1月前

    建议题主使用 explain 分析下SQL的执行计划,看是否用到了索引。

    如果用到了索引,还是很慢的话,很有可能是网络IO的开销,建议排查下到远程库的网络延迟和吞吐量。

    点赞 评论 复制链接分享
  • a1767028198 a1767028198 1月前

    oracle没试过,mysql500w左右,这种插入就不怎么快了 - -

    还是得看执行计划才行

    点赞 评论 复制链接分享

为你推荐