我有一个名为maptable
的表,如下所示:
occ_id name position
0124 Mark Jones 2
Hanna Smith 3
Frank Williams 4
0238 Henry Bassett 5
我正在努力填写'缺少的occ_id列(意思是,Hanna Smith和Frank Williams也应该有occ_id 0124)。
我提出了以下程序来完成这项工作,但是有大约6000条记录,每次运行它都会超时:
CREATE DEFINER=`root`@`localhost` PROCEDURE `mapjoinid_1`()
MODIFIES SQL DATA
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
SELECT COUNT(*) FROM maptable WHERE occ_id = '' INTO n;
SET i=0;
WHILE i < n DO
UPDATE maptable m JOIN maptable mt ON (m.position - 1) = mt.position SET m.occ_id = mt.occ_id;
SET i = i + 1;
END WHILE;
End
是否有一种更有效的方式来循环或重复update
语句,它不会花费这么长时间来处理?
答案 0 :(得分:0)
效率问题很可能来自于在while循环中声明Join。 MySQL在运行这些类型的函数方面并不是特别擅长,所以解决它的方法是在MySQL更新中进行嵌套选择:MySQL - UPDATE query based on SELECT Query。如果您不打算重复运行此过程(可能与存储过程一样),那么我认为这是最有效的操作过程。
超时也可能来自您的变量声明:仔细检查以查看所有变量的增量并正确存储。