苏生Susheng 2021-03-09 14:55 采纳率: 50%
浏览 73

将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条回答 默认 最新

  • 关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器