对于50000行的表,MySQL触发器AFTER UPDATE执行速度极慢

问题描述 投票:-1回答:1

我已经写了一个MySQL AFTER UPDATE触发器来更新属于数据库-B的表-B的记录,只要属于另一个数据库-A的一行表更新为UPDATED。

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

这个简单的操作需要超过20分钟的时间来遍历50000多行Table-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分钟。

mysql triggers
1个回答
0
投票

确保你有一个复合索引

Database_B.TABLE_B   columns(col_3,col_4) 

Database_B.TABLE_B   columns(col_5,col_6) 

(并且你不应该在对象名称之间使用带有减号的符号,这种表示法需要反引号)

© www.soinside.com 2019 - 2024. All rights reserved.