有两张表,表A和表B,A表有20个字段,B表有20个字段,A表和B表前19个字段完全一样,A表第20个字段为空,B表第20个字段有值,现在,我们需要将B表的最后一个字段值,一一对应更新到A表中,传统的update执行速度太慢,总共140多万的数据,根本执行不动,有什么好的办法吗?
UPDATE A
SET A.ECID=(
SELECT B.ECID
FROM B
WHERE A.ID=B.ID
)
WHERE EXIST
SELECT 1
FROM B
WHERE A.ID=B.ID
这样的写法执行速度慢到爆炸!求一个高效率的方法
你需要为该字段建立一个索引,再进行尝试。
调用存贮过程。
DELIMITER $$
USE 数据库名
$$
DROP PROCEDURE IF EXISTS 存贮过程名称
$$
CREATE DEFINER=root
@localhost
PROCEDURE 存贮过程名称
()
BEGIN DECLARE user_course_id VARCHAR(20);
DECLARE year_a INT;
DECLARE cur1 CURSOR FOR SELECT 字段_20,id b_id FROM tb_user_course uc ;
OPEN cur1;
FETCH cur1 INTO 字段_20;
WHILE (字段_20 IS NOT NULL ) DO
UPDATE 表A SET 字段20=字段_20 WHERE id=b_id;
FETCH cur1 INTO 字段_20,b_id;
END WHILE;
CLOSE cur1;
END$$
DELIMITER ;
update TBa set column20=b.column20 from TBb as b where ....
做个视图,不一定要合在一起呀!