这与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;
等等。那有助于改善任何表现吗?
答案 0 :(得分:0)
特定WHEN claus是否有帮助取决于可以优化等效WHERE子句的数量。
在这种特殊情况下,WHERE new.value = 1
过滤器(如果不是)会快速执行UPDATE语句的整个执行,因此它应具有相同的性能。
在一般情况下,WHERE过滤器可能也无法优化,因为它与查询中的其他一些条件相结合。
没有使用WHEN的性能低于WHERE的情况,所以如果你关心性能,你可能应该使用WHEN。 但是,将触发器拆分为两个会使架构更复杂,因此只有在实际遇到性能问题时,或者如果单独的WHEN子句更好地记录正在发生的情况时,才应执行此操作。