MYSQL里,两个表 t1和t2,分别有字段 t1:c1,c2,c3,t2:c11,c12,c13,t1.c2=t2.c13,现在要更新t1.c2=t2.c11,两个表的数据都很多,t1有30W条左右,t2有10W条左右,我现在这样子写:
UPDATE t1 SET t1.c2=(SELECT t2.c11 FROM t2 WHERE (t2.c13=t1.t2) ) ,半小时了还在执行,请一个优化的方法。
问题的关键是 1)多对多,2)而你又要更新这个多对多的键; 这说明,你本身的数据逻辑对应就混乱。
假定你认为数据逻辑没问题可以这么更新。
剩下的就是你1个update语句执行的问题了, 会:1)这个内部结果集会很大,占用资源 ,2)内部索引的锁定、更新、多次更新问题。
所以,可以这么解决:
update t1
set c2=(select min(c11) from t2 where c13=t1.c2) ---假定你的数据逻辑对应没有问题
写个小程序更新数据,慢慢跑
Update t1
inner join t2 on t2.c13=t1.t2
set t1.c2=t2.c11
试下这种,两个表关联字段键索引。