【问题标题】:Multiple small trigger vs single large trigger on table [duplicate]表上的多个小触发器与单个大触发器[重复]
【发布时间】: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 个触发器,考虑将所有内容放在一个包中不是明智之举吗?

标签: oracle triggers


【解决方案1】:

我看不出多个触发器的执行速度会显着提高。唯一的权衡是它们不会执行条件逻辑,从而节省了非常小的几分之一秒。

这确实是一个设计/维护问题...假设您想要检测代码以提供时序信息:如果您有一个触发器,那么您只需要进入一个程序,而有多个触发器,您需要去多个地方来检测代码。

另外,请考虑使用 CASE 语句而不是 IF(它更简洁/更易于阅读/维护)。

【讨论】:

    【解决方案2】:

    在我的情况下,一个触发器比多个小触发器快得多。为什么我不知道。

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多