对于50000行的表,MySQL触发器AFTER UPDATE执行非常慢

时间:2019-04-20 11:27:48

标签: mysql triggers

每当属于另一个Database-A的Table-A的行被更新时,我就编写了一个MySQL AFTER UPDATE触发器来更新属于Database-B的Table-B的记录。

其中表A和表B由相同的列和结构组成,但属于两个不同的数据库。即数据库A和数据库B

此简单的操作要花费20分钟以上的时间遍历表B的50000+行。这是非常缓慢的。

请帮助我解决扳机问题。或者有什么方法可以减少执行触发器所需的时间。

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 :(得分:0)

作为用户,您有tbale上的综合索引

Database_B.TABLE_B   columns(col_3,col_4) 

Database_B.TABLE_B   columns(col_5,col_6) 

(而且您不应该在对象名称之间使用带负号的表示法,这种表示法要求使用反斜线)