Mysql语句单独执行很快,但放存储过程里执行很慢
gcmud 2017-05-22 11:52:41 查阅慢日志发现一个存储过程执行很慢,但里面的语句都很简单,相关表对应的主键和索引也都有,而且把语句拿出来单独执行都很快。请教大家知道是什么问题不?
存储过程为:
CREATE DEFINER = `wegameroot2016`@`%` PROCEDURE `csp_DelGroupBroadComment`(p_groupID varchar(30), p_langType varchar(2), p_broadID bigint, p_commentID int, p_delTime datetime, p_delUserID int)
BEGIN
declare p_sendUserID int;
declare p_state tinyint;
declare RETURN_VALUE int;
set RETURN_VALUE=0;
select State into p_state from cht_groupbroadinfo where GroupID=p_groupID and LangType=p_langType and BroadID=p_broadID;
if FOUND_ROWS()=0 then
set RETURN_VALUE=1;/*?????*/
elseif p_state=2 then
set RETURN_VALUE=2;/*??????*/
else
select SendUserID, State into p_sendUserID, p_state from cht_groupbroadcommentinfo where GroupID=p_groupID and LangType=p_langType and BroadID=p_broadID and CommentID=p_commentID;
if FOUND_ROWS()=0 then
set RETURN_VALUE=3;/*?????*/
elseif p_state=2 then
set RETURN_VALUE=4;/*??????*/
elseif p_delUserID>0 and p_sendUserID<>p_delUserID then
set RETURN_VALUE=5;/*??????????*/
else
update cht_groupbroadcommentinfo set State=2, StateChangeTime=p_delTime where GroupID=p_groupID and LangType=p_langType and BroadID=p_broadID and CommentID=p_commentID;
end if;
end if;
select RETURN_VALUE;
END;
执行调用为:
call csp_DelGroupBroadComment('PetGame', 'CN', 117685, 12, '2017-05-22 10:23:17.873', 0);
执行很慢,要1分钟,RETURN_VALUE结果是4,就慢在里面的“select SendUserID, State from cht_groupbroadcommentinfo”这条语句上。
单独拿出来:很快很快
set @groupID='PetGame';
set @langType='CN';
set @broadID=117685;
set @commentID=12;
select SendUserID, State from cht_groupbroadcommentinfo where GroupID=@groupID and LangType=@langType and BroadID=@broadID and CommentID=@commentID;
表cht_groupbroadcommentinfo 有主键和索引如下:
PRIMARY KEY (`GroupID`, `LangType`, `BroadID`, `CommentID`),
INDEX `idx_senduser` (`SendUserID`, `GroupID`, `LangType`, `SendTime`) USING BTREE ,
INDEX `idx_state` (`GroupID`, `LangType`, `BroadID`, `State`, `CommentID`) USING BTREE
大家帮忙看看有什么头绪吗?