Хранимая процедура INSERT INTO SELECT в MySQL 5.5.62-log версии - PullRequest
2 голосов
/ 23 апреля 2020

Я должен зарегистрироваться в 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 Ответ

1 голос
/ 25 апреля 2020

Может помочь указатель на AccessLastDate.

Обратите внимание, что добавление индекса увеличивает время вставки и занимает больше места на диске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...