2011-11-24 81 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

你說得對,該行在加入大量表的視圖上做了選擇,這就是爲什麼它很慢。 –