【发布时间】:2010-12-17 02:56:10
【问题描述】:
触发器可以提高或阻碍性能的条件是什么?什么时候使用,什么时候不使用系统中的触发器?
如何使用触发器来施加复杂的约束?
【问题讨论】:
触发器可以提高或阻碍性能的条件是什么?什么时候使用,什么时候不使用系统中的触发器?
如何使用触发器来施加复杂的约束?
【问题讨论】:
执行触发器总是有一些开销 - 至少,您正在对导致触发器触发的每一行从 SQL 引擎到 PL/SQL 引擎进行上下文转换。虽然触发触发器的开销的绝对量级相对恒定,但开销百分比的变化很大,具体取决于您执行 DML 的方式。如果您有一个应用程序在集合中添加或修改行,这是对关系数据进行操作的最快方式,那么触发器对性能的相对影响要大得多,因为这些上下文的成本加上触发器实际的成本做,很快就会支配做触发 DML 的成本。
理论上,触发器可以用来强制执行复杂的约束,因为触发器可以查询其他表或调用函数来进行复杂的比较。然而,在实践中,即使不是不可能,也很难以在多用户环境中实际正确的方式对这些触发器进行编码,因此设计一个需要约束来查看数据的系统通常不是一个好主意。表。这通常表明数据模型存在问题。
【讨论】:
这是一个非常开放的问题(可能是家庭作业?)。 Oracle Concepts Guide section on triggers 是开始了解它们的好地方。
【讨论】:
只是一个指向 Tom Kyte 关于trigger vs declarative constraint 的有趣帖子的链接。
【讨论】: