Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> Re: Query failing in CBO mode

Re: Query failing in CBO mode

From: Jonathan Lewis <jonathan_at_jlcomp.demon.co.uk>
Date: Wed, 26 Feb 2003 02:53:52 -0800
Message-ID: <F001.00559C1D.20030226025352@fatcity.com>

All other things being equal (and there
are a couple of pages in the performance tuning guide outlining some things that
are not equal - like joins conditions, indexed columns, subqueries, user-defined functions etc.) the 'final' predicates against a single table are evaluated from the bottom up under RBO and from the top down under CBO.

Everything is subject to change, of course - so if you are using cpu_costing in version 9 you may already have discovered that Oracle will ignore the above and re-arrange the order of the 'final' predicates against a single table to minimise the CPU cost of evaluating them.

In your case it appears that the RBO eliminates the problem rows because none of them get through the last two predicates:

          PROJECT_ORDER = 'Y'
    and ORDER_STATUS ='O'

Regards

Jonathan Lewis
http://www.jlcomp.demon.co.uk

Coming soon one-day tutorials:
Cost Based Optimisation
Trouble-shooting and Tuning
Indexing Strategies
(see http://www.jlcomp.demon.co.uk/tutorial.html )

____UK_______March 19th
____USA_(FL)_May 2nd

Next Seminar dates:
(see http://www.jlcomp.demon.co.uk/seminar.html )

____USA_(CA, TX)_August

The Co-operative Oracle Users' FAQ
http://www.jlcomp.demon.co.uk/faq/ind_faq.html

> I have an application query that runs fine in RBO mode but failing
in CBO with ORA-01722: invalid number -
>
> select /*+ rule */ ORDER_NO,ITEM_NO
> from SCHED_RECEIPTS_at_db01.world
> where ORDER_NO = 4432089
> and PROJECT_ORDER = 'Y' and ORDER_STATUS ='O'
>
> ORDER_NO ITEM_NO
> ---------- --------------------
> 4432089 TOOLING COSTS
>
> 1 row selected.
>
> select /*+ choose */ ORDER_NO,ITEM_NO
> from SCHED_RECEIPTS_at_db01.world
> where ORDER_NO = 4432089
> and PROJECT_ORDER = 'Y' and ORDER_STATUS ='O'
>
> ERROR:
> ORA-01722: invalid number
> ORA-02063: preceding line from DB01.WORLD
>
> no rows selected
>
> ORDER_NO column is varchar2 field and it may be containing some
non-numeric data, so I understand that Oracle may be doing implicit conversion on order_no. But, then why it is working fine in RULE based. The explain plan is same in both cases and is using FULL Table access. The table has unique index on ORDER no.
>

-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: Jonathan Lewis
  INET: jonathan_at_jlcomp.demon.co.uk

Fat City Network Services    -- 858-538-5051 http://www.fatcity.com
San Diego, California        -- Mailing list and web hosting services
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: ListGuru_at_fatcity.com (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).
Received on Wed Feb 26 2003 - 04:53:52 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US