2011-11-24 83 views
1

当我从与触发更新表中的100个记录启用它需要15秒执行,但是当我没有触发运行只需要2为什么这个触发器会使更新变得如此缓慢?

这对当地的开发版本,在生产一个它需要两分钟。有什么方法可以加快速度吗?

谢谢。

DROP TRIGGER IF EXISTS imuebles_update; 
    DELIMITER | 
    CREATE TRIGGER imuebles_update AFTER UPDATE ON imuebles 
    FOR EACH ROW 
    BEGIN 

    IF NEW.pub_id IS NULL THEN 
     DELETE FROM search_engine WHERE id = NEW.idImuebles; 
    ELSE 
     REPLACE INTO search_engine SELECT * FROM search_engine_v WHERE id = NEW.idImuebles; 
    END IF; 

    END; 
    | 

    DELIMITER ; 
+0

检查触发器中查询的查询计划以确保您具有适当的索引。 –

回答

2

然而对于我来说,它看起来像,

REPLACE INTO search_engine SELECT * FROM search_engine_v WHERE id = NEW.idImuebles; 

可能是一个相当沉重的责任的事情更新后的每一行运行。

我的猜测是,它需要一个很好的看看为什么这是必需的,而不是一个简单的修复。

如果您发布了一些数据库结构信息,也许有人可以建议如何解决它。

+0

你说得对,该行在加入大量表的视图上做了选择,这就是为什么它很慢。 –