Stored procedures 有一个极端缓慢的sp问题,他不做他的工作

Stored procedures 有一个极端缓慢的sp问题,他不做他的工作,stored-procedures,mysql,Stored Procedures,Mysql,我得到了这个sp: DROP TABLE IF EXISTS SplitValuesDump; CREATE TABLE SplitValuesDump ( value VARCHAR(1000) NOT NULL PRIMARY KEY ); DELIMITER $$ DROP PROCEDURE IF EXISTS `ChangeSitesRedirects`$$ CREATE PROCEDURE `ChangeSitesRedirects`

我得到了这个sp:

DROP  TABLE IF EXISTS SplitValuesDump;
      CREATE  TABLE SplitValuesDump (
        value VARCHAR(1000) NOT NULL PRIMARY KEY
        );
DELIMITER $$
DROP PROCEDURE IF EXISTS `ChangeSitesRedirects`$$
CREATE  PROCEDURE `ChangeSitesRedirects`(
    prodimainAddress varchar(255),
    subdomainMainAddress varchar(255)
)
    SQL SECURITY INVOKER
        BEGIN
    DECLARE tdomain varchar(1000);
    DECLARE tvalue varchar(1000);
    DECLARE prepValue varchar(1000);
    DECLARE subdomainFullAddress varchar(1000);
    DECLARE totalDomain int;
    DECLARE tclientid int;
    DECLARE sitedone INT DEFAULT 0;
    DECLARE splitdone INT DEFAULT 0;
    DECLARE lastDomain varchar(1000);
    DECLARE curlSites CURSOR FOR (SELECT domain,clientid from sites where redirectsubdomain = 'N');
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET sitedone = 1;
    set sitedone := 0;
    OPEN curlSites;
    Scan_Sites:WHILE (sitedone = 0) DO
    IF sitedone = 1 THEN
      BEGIN
        LEAVE Scan_Sites;
      END;
    ELSE
      BEGIN
        DECLARE curlStringDump CURSOR FOR (SELECT `value` from SplitValuesDump);
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET splitdone = 1;
        FETCH curlSites INTO tdomain,tclientid;
        CALL split_string(tdomain,';');
        OPEN curlStringDump;
        SET splitdone:=0;
        ScanDump: WHILE (splitdone = 0) DO
        IF splitdone = 1 THEN
          BEGIN
            LEAVE ScanDump;
          END;
        ELSE
          BEGIN
            FETCH curlStringDump INTO tvalue;
            SET subdomainFullAddress:= subdomainMainAddress;
            IF tvalue <> "" THEN
            BEGIN
                IF tvalue like prodimainAddress OR tvalue like subdomainMainAddress THEN 
                BEGIN
                    set totalDomain := totalDomain + 1;
                    IF tvalue like subdomainMainAddress THEN
                    BEGIN
                        SET subdomainFullAddress := tvalue;
                    END;
                    END IF;

                END;
                ELSE
                BEGIN
                    set totalDomain := totalDomain + 1;
                    set lastDomain := tvalue;
                END;
                END IF;
            END;
            END IF;
          END;
        END IF;
        END WHILE ScanDump;
        CLOSE curlStringDump; 
        SET splitdone :=0;
        SET prepValue:='N';
        IF lastDomain = '' AND totalDomain = 2 THEN
        BEGIN
            set prepValue := subdomainFullAddress || CHAR(2) || prodimainAddress;
            INSERT INTO sites_tmp SELECT * FROM sites where clientid = tclientid limit 1;
            UPDATE sites_tmp SET redirectsubdomain = prepValue WHERE clientid = tclientid limit 1; 
        END;
        ELSE
        BEGIN
            set prepValue := prodimainAddress || CHAR(2) || lastDomain || CHAR(1) ||subdomainFullAddress || CHAR(2) || lastDomain;
            INSERT INTO sites_tmp SELECT * FROM sites where clientid = tclientid limit 1;
            UPDATE sites_tmp SET redirectsubdomain = prepValue WHERE clientid = tclientid limit 1; 
        END;
        END IF;
      END;
    END IF;
    END WHILE Scan_Sites;
    CLOSE curlSites; 
    SET sitedone :=0;
END$$
我试着从列数据中获取一些信息,拆分他的数据,并将一些数据放在那里。 对于表站点上记录的每个 然后更新表sites\u tmp

我遇到了一个问题,我不知道怎样才能更快地调试? 你推荐什么? 以及为什么它这么慢???
最后它没有通过所有记录?

有多慢?站点和SplitValuesDump中的平均行数是多少?它可以运行3分钟而不移动。同样,在我寻找的表格中,也不会给出正确的结果,更可能给出0,这到底是怎么回事。但我的问题是很难调试这个问题,因为我无法打印到控制台,mysql已知的问题和我无法调试的主要问题,因为它在运行中卡住了看看如何调试mysql SP哦,好的!SplitValuesDump由split_字符串填充。你知道它为什么这么慢吗,或者我如何开始调试??它的sp我得到了问题做调试