MySQL 5.5.62日志版本中的存储过程INSERT INTO SELECT

时间:2020-04-23 10:42:54

标签: mysql

我必须在tbl2中注册tbl1中所有具有最后访问权限date的行,并且访问同一nickname

我的数据库是MySQL 5.5.62日志版本。

我尝试了这个Stored Procedure

没有错误,但是在tbl2上的插入非常长。

是否有优化此SP的建议?

BEGIN

DECLARE var INT;

SET var = 0;

WHILE var < 1 DO
    INSERT IGNORE INTO `tbl2` (
                `NickName`,
                `Continent`,
                `Region`,
                `AccessLastDate`
    ) SELECT
        `NickName`,
        `Continent`,
        `Region`,
        `AccessLastDate`
    FROM
        `tbl1` t1
    WHERE
        Continent IN ('Asia','Oceania','Africa')
        AND 
             t1.`AccessLastDate` = (
        SELECT
            MAX(t2.`AccessLastDate`)
        FROM
            `tbl1` t2
        WHERE
            t2.`NickName` = t1.`NickName`
    )
ORDER BY
    t1.`AccessLastDate`;

SET var = var + 1;

END
WHILE;

enter image description here

1 个答案:

答案 0 :(得分:0)

在AccessLastDate上建立索引可能会有所帮助。

请注意,添加索引会增加插入时间并占用更多磁盘空间。

相关问题