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

Reply via email to