条件触发器没有改善性能?

时间:2016-07-08 13:59:13

标签: database sqlite triggers

这与SQLITE3的条件触发器有关。

考虑一下,例如,我在表T上有更新触发器

CREATE TRIGGER AfterUpdateOnT
AFTER UPDATE ON T
FOR EACH ROW
BEGIN

    Update table T1 where new.value = 1;
    Update table T2 where new.value = 2;
    .
    .
    .
    .
END;

那么,将它们分成各种触发器是否有意义:

CREATE TRIGGER AfterUpdateOnTWhen1
AFTER UPDATE ON T
WHEN new.value = 1
BEGIN
    UPDATE TABLE T1 SET VALUE = new.value;
END;

CREATE TRIGGER AfterUpdateOnTWhen2
AFTER UPDATE ON T
WHEN new.value = 2
BEGIN
   UPDATE TABLE T2 SET VALUE = new.value;
END;

等等。那有助于改善任何表现吗?

1 个答案:

答案 0 :(得分:0)

特定WHEN claus是否有帮助取决于可以优化等效WHERE子句的数量。

在这种特殊情况下,WHERE new.value = 1过滤器(如果不是)会快速执行UPDATE语句的整个执行,因此它应具有相同的性能。

在一般情况下,WHERE过滤器可能也无法优化,因为它与查询中的其他一些条件相结合。

没有使用WHEN的性能低于WHERE的情况,所以如果你关心性能,你可能应该使用WHEN。 但是,将触发器拆分为两个会使架构更复杂,因此只有在实际遇到性能问题时,或者如果单独的WHEN子句更好地记录正在发生的情况时,才应执行此操作。