> 데이터 베이스 > MySQL 튜토리얼 > mysql-请教存储过程执行很慢,如何优化?

mysql-请教存储过程执行很慢,如何优化?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-06 09:33:17
원래의
2675명이 탐색했습니다.

mysql优化存储过程

BEGIN
DECLARE personPlaneId BIGINT;

DECLARE starttime datetime; #开始时间
DECLARE endtime datetime; #结束时间
DECLARE sumStudyTime INT; #当前学时
DECLARE targetStudyTime INT; #目标学时
DECLARE id1_count BIGINT default 0; #t_stage_info 第一阶段count
DECLARE id2_count BIGINT default 0; #t_stage_info 第二阶段count
DECLARE id3_count BIGINT default 0; #t_stage_info 第三阶段count
DECLARE firstEndTime datetime; #第一阶段结束时间
DECLARE secEndTime datetime; #第二阶段结束时间
DECLARE thirdEndTime datetime; #第三阶段结束时间
DECLARE done INT DEFAULT 0;

<code>    #声明光标        DECLARE cur1 CURSOR FOR            SELECT p1.id,            p1.start_learn_time start_time,            p1.last_date end_time,            p1.sum_study_time,p1.target_study_time             FROM t_person_plan p1 LEFT JOIN t_person_plan_record p2              ON p1.id = p2.person_plan_id WHERE p1.license_type = 7              AND p1.last_date 12 AND sumStudyTime14 THEN                        #如果thirdEndTime为空则取最后学习的时间                        SET thirdEndTime = CASE WHEN thirdEndTime IS NULL THEN endTime ELSE thirdEndTime END;                        #更新第一阶段数据                        IF id1_count=0 THEN                            INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage)                                 VALUES(personPlaneId,startTime,firstEndTime,sumStudyTime,targetStudyTime,1);                         ELSE                            UPDATE t_stage_info SET end_time=firstEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=1;                        END IF;                        #更新第二阶段数据                        IF id2_count=0 THEN                            INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage)                                 VALUES(personPlaneId,firstEndTime,secEndTime,sumStudyTime,targetStudyTime,2);                         ELSE                            UPDATE t_stage_info SET end_time=secEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=2;                        END IF;                        #更新第三阶段数据                        IF id3_count=0 THEN                            INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage)                                 VALUES(personPlaneId,secEndTime,thirdEndTime,sumStudyTime,targetStudyTime,3);                         ELSE                            UPDATE t_stage_info SET end_time=thirdEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=3;                        END IF;                    END IF;    end if;        UNTIL done END REPEAT;      close cur1; </code>
로그인 후 복사

END
现在执行了2小时才有了10几万数据,
我在t_person_plan_record 表里对‘person_plan_id ’建了索引,
在表t_stage_info 对person_plan_id ’建立了索引,其他我就不知道怎么优化了,
请问大神,还能怎么优化比较好呢?

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿