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多个字段,服务器空间也充足,而且我单独执行里面的查询语句也是非常非常慢,不知道怎么优化,望大神看到后不吝赐教)