Hi
The choice of of whether to use nested loop, hash join, sort-merge join
is driven by the cost (logical ios performed ) and cardinality ( count of
rows source for given
operation ). Optimizer formulates several plan - before the best plan among
them is chosen
Approach one can take to benefit in the performance would be
1. If nested loops join - would give better performance for your query
then perform thefollowing
a. check if the involved tables have indexes
b. verify if the indexes, tables involved have the statistics have been
calculated
frequently
c. the ordering of the tables in the 'from clause' should be in such a way
that the largest table (more rows) needs to be placed at the end or
towards
the end in the 'from clause'
for eg : select c1, c2 from b, a where a.id = b.id === (a is largest table
)
d. Attempt should be made such that cost of sort-merge join would be more
expensive than the nested loops join (for eg) - so that the optimizer
will
choose nested loops
1. if permitted hints (USE_NL ) can be used
2. optimizer_index_cost_adj ( can be used - so that indexes will be used
in the plan )
Question :
if optimize finds that are more
qualifying records in inner table then it will prefer to go for sort merge
and will do full scan of inner table , but if it thinks there are less
records in inner table it will user nested loop . am I correct ?
Answer:
Driving table in nested loops join is the one which is used to select each
row
from ( when an ORDERED HINT is used the 'first table' in the from clause
assuming 2 tables
is the 'driving' table the other table is called 'inner table ' )
fro eg: select c1, c2 from a, b where a.id = b.id usually the driving
table is a and
the inner table is b ( you can double verify this in the 10053 output )
Usually the 'inner table' if it has more rows than the 'driving table' ===
that is when
the nested loops is advantageous - that is considered the same by the
optimizer as well
Thanks,
Kavi
Grabowy, Chris wrote:
bp,
Checkout a white paper entitled: A Look Under The Hood of CBO: The 10053
Event. You can find this whitepaper on the hotsos.com website. Your
probably going to be looking at the General Plans section of the trace.
Goodluck.
Chris
--
BigP [EMAIL PROTECTED]
Sent by: [EMAIL PROTECTED]
07/23/2002 06:58 PM
Please respond to ORACLE-L
To: Multiple recipients of list ORACLE-L [EMAIL PROTECTED]
cc:
Subject:type of join in sql
can some body shed some light on how does the optimizer decides to choose
the kind of join i.e. nested loop, sort merge or hash join . In one of
queries if i tweak the join condition it changes the type of join and
start using index , otherwise it doesn't .
I thought it depends on statistics .. if optimize finds that are more
qualifying records in inner table then it will prefer to go for sort merge
and will do full scan of inner table , but if it thinks there are less
records in inner table it will user nested loop . am I correct ?
TIA ,
bp
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: Grabowy, Chris
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).
begin:vcard
n:;Kavitha
x-mozilla-html:FALSE
adr:;;
version:2.1
email;internet:[EMAIL PROTECTED]
fn:Kavitha Muthukumaren
end:vcard