2012-11-01 46 views
1

可能重複:
Consolidate several Oracle triggers. Any performance impact?多個小觸發VS上表大單觸發

問題: 哪一個是最好的(性能)?有多個觸發器(約7-10)一個用於每種情況/目的,或一個觸發器它可以處理所有情況(通過使用if等)。

詳細信息:基於Oracle數據庫 我們正在開發的企業應用程序。我們有一張大約3M行的表格,這是我們應用的基本表格。有幾種情況我們只需要使用觸發器來處理。恕我直言,爲了維護,最好有多個觸發器。但是表演呢?

+0

您是否意識到,如果在單個表上有多個相同類型的觸發器,則Oracle數據庫選擇_arbitrary_命令來執行這些觸發器。每個後續觸發器都可以看到以前觸發的觸發器所做的更改。每個觸發器都可以看到舊的和新的值。但如前所述,執行順序是任意的。爲確保以特定順序發生多個觸發操作,您必須將這些操作合併爲一個觸發器。 –

+0

是的,我意識到(並知道)。這種情況就像是一個觸發器插入'table_1'中,第二個觸發器更新'table_2',第三個觸發器插入'table_3'(當然是用他們的小邏輯)。所有觸發器都沒有任何順序(或關係)。我們可以將它們放到一個大觸發器中,或者將它們分離爲多個觸發器。
也許有人會告訴我們,我們不應該通過觸發器來做到這一點。但這是特殊情況,這個問題是關於理解數據庫(幕後過程)的。 –

+1

這可能是間歇性的:http://stackoverflow.com/questions/8579240/consolidate-several-oracle-triggers-any-performance-impact –

回答

0

在我的情況下,一個單一的觸發器比多個小觸發器快得多。爲什麼我不知道。

0

我看不到多個觸發器如何明顯更快地執行。唯一的權衡是他們不會執行條件邏輯,節省很小的一秒。假設你想要測試代碼以給你時間信息:如果你有一個觸發器,那麼你只需要進入一個程序,而使用多個觸發器,你需要去多個地方來測試代碼。

此外,請考慮使用CASE語句,而不是IF(這是更清潔/更易於閱讀/維護)。