mysql存储过程快吗_请教:为什么存储过程刚开始执行快,后面越来越慢?

WHILE v_loop_sql_id <= v_loop_sql_max_id DO

IF p_begin_qh = 0 OR p_begin_qh = "" OR ISNULL(p_begin_qh) THEN

SET v_loop_num = v_min_qh;

ELSE

SET v_loop_num = p_begin_qh;

END IF;

TRUNCATE TABLE ss_success_list;

SELECT s.sql_content INTO v_loop_part_sql FROM ss_where_condition_sql_result_list s WHERE s.id = v_loop_sql_id;

WHILE v_loop_num < v_max_qh DO

SELECT MIN(srl.qh) INTO v_next_qh FROM ss_record_list srl WHERE srl.qh > v_loop_num;

SELECT srl.r1,srl.r2,srl.r3,srl.r4,srl.r5,srl.r6,srl.r7,srl.b1

INTO v_loop_next_record_r1,v_loop_next_record_r2,v_loop_next_record_r3,v_loop_next_record_r4,v_loop_next_record_r5,v_loop_next_record_r6,v_loop_next_record_r7,v_loop_next_record_b1

FROM ss_record_list srl WHERE srl.qh = v_next_qh;

SET v_flag1_count = 0;

SET v_flag2_count = 0;

TRUNCATE TABLE ss_sm_array_bi;

#动态生成v_loop_sql

SET v_loop_sql = CONCAT("INSERT INTO ss_sm_array_bi ","SELECT t_out2.sf_code,t_out2.num FROM (");

SET v_loop_sql = CONCAT(v_loop_sql,"SELECT t_out1.sf_code,t_out1.num FROM (");

SET v_loop_sql = CONCAT(v_loop_sql,"SELECT s.sf_code,s.num FROM ss_sm_list s ");

SET v_loop_sql = CONCAT(v_loop_sql,"LEFT JOIN ss_sf_list_solution_1_1 sf ON s.sf_code = sf.sf_code ");

SET v_loop_sql = CONCAT(v_loop_sql,"LEFT JOIN ss_anquan_qh_sf_list saq ON s.qh = saq.qh AND s.sf_code = saq.sf_code ");

SET v_loop_sql = CONCAT(v_loop_sql,"WHERE s.qh = ",v_loop_num," AND sf.num_type = 2 ");

SET v_loop_sql = CONCAT(v_loop_sql," ",v_loop_part_sql);

SET v_loop_sql = CONCAT(v_loop_sql,") t_out1 LIMIT 0,",v_sm_num,") t_out2;");

#执行动态sql

SET @v_sql=v_loop_sql;

PREPARE stmt FROM @v_sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SELECT COUNT(1) INTO v_exist FROM ss_sm_array_bi s

WHERE (s.num = v_loop_next_record_r1 OR s.num = v_loop_next_record_r2 OR s.num = v_loop_next_record_r3 OR s.num = v_loop_next_record_r4

OR s.num = v_loop_next_record_r5 OR s.num = v_loop_next_record_r6 OR s.num = v_loop_next_record_r7 OR s.num = v_loop_next_record_b1);

SELECT COUNT(1) INTO v_real FROM ss_sm_array_bi s;

IF v_real >= v_sm_num THEN

IF v_exist <> 0 THEN

INSERT INTO ss_success_list VALUES (v_loop_num,0);

ELSE

INSERT INTO ss_success_list VALUES (v_loop_num,1);

END IF;

END IF;

SELECT MIN(srl.qh) INTO v_loop_num FROM ss_record_list srl WHERE srl.qh > v_loop_num;

END WHILE;

SELECT COUNT(1) INTO v_flag1_count FROM ss_success_list a WHERE a.flag = 1;

SELECT COUNT(1) INTO v_flag2_count FROM ss_success_list a WHERE a.flag = 0;

UPDATE ss_where_condition_sql_result_list SET right_kill_total = v_flag1_count , wrong_kill_total = v_flag2_count

WHERE id = v_loop_sql_id;

SELECT MIN(id) INTO v_loop_sql_id FROM ss_where_condition_sql_result_list s WHERE s.id > v_loop_sql_id;

END WHILE;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值