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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于50000行的表,MySQL触发器AFTER UPDATE执行速度极慢相关的知识,希望对你有一定的参考价值。

我已经写了一个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分钟。

答案

确保你有一个复合索引

Database_B.TABLE_B   columns(col_3,col_4) 

Database_B.TABLE_B   columns(col_5,col_6) 

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

以上是关于对于50000行的表,MySQL触发器AFTER UPDATE执行速度极慢的主要内容,如果未能解决你的问题,请参考以下文章

mysql创建触发器

MySQL触发器

mysql 存储过程

mysql中的触发器

mysql触发器Before和After的区别

mysql之触发器before和after的区别