Login | Register   
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: SQL
Expertise: Beginner
Mar 17, 2008

Trigger Efficiency in Oracle

The documentation for Oracle 9.2 and previous versions contains the following paragraph:

"AFTER row triggers are slightly more efficient than BEFORE row triggers. With BEFORE row triggers, affected data blocks must be read (logical read, not physical read) once for the trigger and then again for the triggering statement."

For some reason, the documentation in Oracle 10g, and 11g changed as follows:

"BEFORE row triggers are slightly more efficient than AFTER row triggers. With AFTER row triggers, affected data blocks must be read (logical read, not physical read) once for the trigger and then again for the triggering statement. Alternatively, with BEFORE row triggers, the data blocks must be read only once for both the triggering statement and the trigger."

It turns out that the latest documentation for Oracle 10g and 11g is incorrect and the documentation for Oracle 9i and previous releases is correct: AFTER row triggers are more efficient than BEFORE row triggers. This is true for all versions of Oracle. To verify this, use the following test:


create table tmptrig as select 0 as i from dual;
create trigger tmp$before_trigger before update on tmptrig
for each row    begin  if :new.i is null then null; end if; end;
/
update tmptrig set i = i + 1;
set autot trace stat
/
set autot off
drop trigger tmp$before_trigger;
create or replace trigger tmp$after_trigger after update on tmptrig
for each row     begin  if :new.i is null then null; end if; end;
/
update tmptrig set i = i + 1;
set autot trace stat
/
set autot off
drop trigger tmp$after_trigger;
drop table tmptrig;
Alexander Ocher
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap