The other week a new production process was running much more slowly than
anticipated.  A file needed to be sent out by 6:00pm and at the rate the
table was being populated it wouldn't complete until around 9:30pm.  The
production people and developers came to me for help and I  saw that the SQL
Explain Plan that was usually being executed (this would run a few million
times) was something like

select a.col1,a.col2,a.col3,b.col2
from a, b
where a.col4=b.col1
and a.col5=:b1

nested loops
        table a
                index a1 (unique)
        table b
                index b1 (range)

This looked pretty good, but it occurred to me that only one column was
being selected from table b, so if I added a index (b2) that combined col1
and col2 to table b then it wouldn't be necessary to read table b at all,
all the information would be in index b2.

This resulted in a plan of:

nested loops
        table a
                index a1 (unique)
        index b1 (range)

I did so on the fly (this was only a 4,000 row table so it took almost no
time to create the index).  I anticipated that it would cut about 25% off
the processing time (only 3/4 as many block reads).  Instead it cut about
75% off the processing time causing it to finish at 5:45 (I was a hero to
the developers and production people, but had to warn them not to tell their
management about it since I could get in trouble for not following the
Change Control Process).  

My question is, where did the additional 50% efficiency come from?  What am
I missing?  I'm glad it worked so well, but would like to understand why...
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Miller, Jay
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to