对于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执行速度极慢的主要内容,如果未能解决你的问题,请参考以下文章