Триггер MySQL ПОСЛЕ ОБНОВЛЕНИЯ выполнение чрезвычайно медленно для таблицы 50000 строк - PullRequest
0 голосов
/ 20 апреля 2019

Я написал MySQL AFTER UPDATE Trigger для записей UPDATE таблицы B, принадлежащих базе данных B, всякий раз, когда строка таблицы A, принадлежащая другой базе данных A, ОБНОВЛЯЕТСЯ.

Где Table-A и Table-B состоят из одинаковых столбцов и структуры, но принадлежат двум разным базам данных. А именно, База данных-A и База данных-B

Эта простая операция занимает более 20 минут для обхода 50000+ строк таблицы-B. Это очень медленно.

Пожалуйста, помогите мне понять, где я ошибаюсь с триггером. Или я могу как-то сократить время, необходимое для выполнения триггера.

DELIMITER $$

CREATE TRIGGER trigger_update_data

    AFTER UPDATE ON Database-A.TABLE-A

    FOR EACH ROW
        BEGIN
            IF (some condition) 
            THEN
                UPDATE Database-B.TABLE-B
                SET 
                    col_1=-2,
                    col_2=NEW.col_2                 
                WHERE col_3=NEW.col_3 and col_4=NEW.col_4;              

            ELSE
                UPDATE Database-B.TABLE-B
                SET 
                    col_1=-2,
                    col_2=NEW.col_2  
                WHERE col_5=NEW.col_5 and col_6=NEW.col_6;                                

            END IF;                     
        END;
$$
DELIMITER ;

Я ожидаю, что время выполнения составляет от 2 до 3 минут, но фактическое время выполнения составляет более 20 минут.

1 Ответ

0 голосов
/ 20 апреля 2019

будьте пользователем, у вас есть составной индекс в tbale

Database_B.TABLE_B   columns(col_3,col_4) 

и

Database_B.TABLE_B   columns(col_5,col_6) 

(и вы не должны использовать нотацию со знаком минус между именем объекта, для этой нотации требуется обратная связь)

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