每当属于另一个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分钟。
答案 0 :(得分:0)
作为用户,您有tbale上的综合索引
Database_B.TABLE_B columns(col_3,col_4)
和
Database_B.TABLE_B columns(col_5,col_6)
(而且您不应该在对象名称之间使用带负号的表示法,这种表示法要求使用反斜线)