【发布时间】:2012-10-21 17:46:43
【问题描述】:
可能重复:
Consolidate several Oracle triggers. Any performance impact?
问题: 哪一个是最好的(性能)?有多个触发器(大约 7-10 个)一个用于每种情况/目的,或者 一个触发器处理所有情况(通过使用 if 等)。
详情: 我们正在开发基于 Oracle 数据库 的企业应用程序。我们有一个大约 3M 行的表,这是我们应用程序的基表。有几种情况我们只需要使用触发器来处理。恕我直言,为了维护,最好有多个触发器。但是性能呢?
【问题讨论】:
-
您是否意识到,如果您在单个表上有多个相同类型的触发器,那么 Oracle 数据库会选择任意顺序来执行这些触发器。每个后续触发器都会看到先前触发的触发器所做的更改。每个触发器都可以看到旧值和新值。但如前所述,执行顺序是任意的。为确保多个触发操作按特定顺序发生,您必须将这些操作合并到一个触发器中。
-
是的,我意识到(并且知道)这一点。这种情况就像,一个触发器插入
table_1,第二个更新table_2,第三个插入table_3(当然是他们的小逻辑)。所有触发器都没有任何顺序(或关系)。我们可以把它们放在一个大触发器中,也可以分开成多个触发器。
也许有人会告诉我们,我们不应该用触发器来做。但这是特殊情况,这个问题是关于理解数据库(在幕后过程中)。 -
是的,这很有用。谢谢。
-
如果您正在认真考虑 7-10 个触发器,考虑将所有内容放在一个包中不是明智之举吗?