免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1148 | 回复: 0
打印 上一主题 下一主题

[求助]MySQL存储过程执行效率问题 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-30 18:43 |只看该作者 |倒序浏览
DELIMITER $$

USE `upc`$$

DROP PROCEDURE IF EXISTS `test3`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `test3`()
BEGIN
  /*定义游标取值*/
    DECLARE v_offering_rel_id VARCHAR(10);
    DECLARE v_offering_id   VARCHAR(10);
    DECLARE v_rel_offering_id  VARCHAR(100);
    DECLARE v_offering_rel_type    VARCHAR(100);
    DECLARE v_commitment_opmode   VARCHAR(10);
    DECLARE v_count INT(4);
    DECLARE v_i INT DEFAULT 0;
    DECLARE v_no_more_products INT DEFAULT 0;
    DECLARE t_error INTEGER DEFAULT 0;
  /*定义主键取值*/
    DECLARE k_prod_offering_rel    VARCHAR(10);
    DECLARE k_offer_rel_char       VARCHAR(10);
    DECLARE k_offer_rel_char_value VARCHAR(10);
    DECLARE k_prod_offering_rel_ext VARCHAR(10);
  /*定义游标*/
  DECLARE cur_offer_rel CURSOR FOR SELECT offering_rel_id , offering_id , rel_offering_id , offering_rel_type , commitment_opmode FROM hu_main_addon_rel_old WHERE offering_rel_type = 'COMPAT'
  AND commitment_opmode = 100;
  /*Not Found时处理方式*/
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_no_more_products = 1;
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
  SET autocommit = 0;
  OPEN cur_offer_rel ;
  REPEAT
    FETCH cur_offer_rel INTO                
                v_offering_rel_id,
                v_offering_id,
                v_rel_offering_id,
                v_offering_rel_type,
                v_commitment_opmode;               
      
    IF v_no_more_products <> 1 THEN   
    BEGIN
    START TRANSACTION;
    SELECT COUNT(*) INTO v_count FROM hu_main_addon_rel_by_b2c_0429 WHERE rel_type = 'optional' AND offer_id_main = v_offering_id AND offer_id_addon = v_rel_offering_id;   
    UPDATE  hu_main_addon_rel_old SET commitment_opmode = v_count WHERE offering_rel_id = v_offering_rel_id;
    END;   
    IF t_error = 1 THEN  
       ROLLBACK;
    ELSE
    SET v_i = v_i + 1;
    IF MOD(v_i , 1000) = 0 THEN
      COMMIT;
    END IF;
    END IF;
    END IF;
    UNTIL v_no_more_products = 1
  END REPEAT ;  
  CLOSE cur_offer_rel ;

END$$

DELIMITER ;

两张表里的数据分别都是6~7万左右,尝试过直接Update,也非常慢。现在执行过程大概每秒4~5条件数据,也太慢了,请帮忙看看哪里是可以优化一下,提高效率。
在线等,感谢

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP