• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

利用游标更新表,效率有关问题,

mysql 搞代码 7年前 (2018-06-05) 133次浏览 已收录 0个评论

利用游标更新表,效率问题,急!!!!
delimiter //
drop PROCEDURE if exists backfill//
create PROCEDURE backfill()
BEGIN
declare id1 INT(10) UNSIGNED default ‘0’;  
declare im1 VARCHAR(20) default NULL;
declare id2 INT(10) UNSIGNED default ‘0’;
declare im2 VARCHAR(20) default NULL;
declare finished int unsigned default ‘0’;

declare cursor1 cursor for select id,im from flow_exfodm_0726_11 ORDER BY id asc,im desc ;
DECLARE CONTINUE HANDLER FOR NOT FOUND set finished = 1;  
open cursor1;  
fetch next from cursor1 into id1,im1;
fill_im_lable:loop
fetch next from cursor1 into id2,im2;
IF finished then
  LEAVE fill_im_lable;
END IF;
if id2 = id1 and im1 is not null and im2 is null then 
update flow_exfodm_0726_2 set im = im1 where id = id2 and im is NULL; #更新表的语句  
end if;
set id1 = id2;
set im1 = im2;  
end loop fill_im_lable;  
close cursor1;  
END //
deallocate cursor1;
delimiter ;
id都是不为空的,im可以有空。
以上是mysql写的存储过程,完成的功能是:遍历整张表,如果id1=id2,那么id1对于的im1值,就填到id2对于的im2的位置。但是执行的速率较慢,请大神帮助优化,感激不尽啊!!!!!

——解决方案——————–
打印出来时间 看看具体哪里慢
——解决方案——————–
感觉上用一句SQL语句应该就可以实现了。 建议楼主给出例子。

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
 

——解决方案——————–
select count(*) from flow_exfodm_0726_11 ;看看多少记录
游标循环效率本来就很低下,这是游标特性决定的,做了不该数据库做的事。

另外你这个修改动作,一条SQL语句就可以实现,为什么要用游标?


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:利用游标更新表,效率有关问题,
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址