【问题标题】:compound trigger - performance impact复合触发器 - 性能影响
【发布时间】:2016-08-20 08:43:19
【问题描述】:

我想问一下复合触发器的性能问题,我最近实际实现了它,并且观察到了很大的性能改进。但是有一点我想讨论一下。

对于我的问题,请考虑以下场景:

假设创建了两个表,如下所示:

~ 创建了两个表:

CREATE TABLE ORDERS (ORD_ID NUMBER, ITEM_CODE VARCHAR2(100), ORD_QTY NUMBER,ORD_DATE DATE);

CREATE TABLE ORDER_ARCHIVE(ORD_ID NUMBER, ORD_CODE VARCHAR2(100));

~ 现在我创建了复合触发器,如下所示:

create or replace trigger TRG_COMP_SAL 
for update or insert on ORDERS 
compound trigger --Trigger Type is Compound here 
type t_tbl_typ is table of ORDER_ARCHIVE%rowtype index by pls_integer; 
v_tbl_events t_tbl_typ; 
idx pls_integer := 0; 
--After Each row statement 
after each row is 
begin 
IF INSERTING THEN 
idx := idx + 1; 
v_tbl_events(idx).ORD_ID := :new.ORD_ID; 
v_tbl_events(idx).ORD_CODE := :NEW.ITEM_CODE; 
END IF; 
-- Checking threshold limit for indx which will be used for bulk insert 
if idx >= 100 then 
forall cnt in 1 .. v_tbl_events.count() 
insert into ORDER_ARCHIVE values v_tbl_events (cnt); 
v_tbl_events.delete; 
idx := 0;-- resetting threshold limit for indx which will be used for bulk insert 
end if; 
end after each row; 
--After statement 
after statement is 
begin 
IF INSERTING THEN 
--Using forall to bulk insert data 
forall cnt in 1 .. v_tbl_events.count() 
insert into ORDER_ARCHIVE values v_tbl_events (cnt); 
END IF; 
end after statement; 
end TRG_COMP_SAL; 

与普通触发器相比,这肯定会更快执行。 但是,我有点困惑:

在批量插入的情况下,AFTER STATEMENT 和 BEFORE STATEMENT 将只执行一次,但每次插入 检查复合触发器中是否存在 BEFORE EACH ROW 和 AFTER EACH ROW 块,将调用复合触发器。

它不会影响性能吗?

请帮忙..

提前谢谢....

【问题讨论】:

  • 等待帮助...

标签: oracle plsql oracle11g triggers


【解决方案1】:

我也遇到过这种需要累积单独的插入,并且 after 语句使用 forall 一次性插入。但是在通常的插入方式中,由于插入本身是一个语句,所以它会为每个插入调用 after 语句!还尝试使用 INSERT ALL into ... 但这也会触发每个“into ..”的 after 语句。

为了使所有插入到一个语句中,这里提到: Best way to do multi-row insert in Oracle?。因此,在将插入作为一个语句进行之后,它只会在阈值或“语句后”之后刷新。这样,即使每次都会调用每一行,但繁重的工作只会在刷新时完成(阈值或后语句)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2017-07-23
    • 2013-01-13
    • 2014-06-10
    • 2012-09-04
    • 1970-01-01
    • 2011-07-07
    相关资源
    最近更新 更多