Charlotte reported back that there are no histograms, so it is not peeking. But it does know that it is looking for exactly one id (which it does not know in the join despite the rownum trick, 'cause even with a stopkey plan oracle apparently does not figure out that it will be solving for exactly one id on the join. -----Original Message----- From: oracle-l-bounce@xxxxxxxxxxxxx [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On Behalf Of Mark W. Farnham Sent: Tuesday, September 12, 2006 5:12 PM To: Mark.Bobak@xxxxxxxxxxxxxxx; charlottejanehammond@xxxxxxxxx; oracle-l@xxxxxxxxxxxxx Subject: RE: Plea for Query Tuning Help If the rownum virtual table trick failed, my guess would be that Oracle needs the value at parse time to get the good plan by peeking.... But I am impressed by the valiant efforts of the list. We're all candidates for puzzlesolvers anonymous! Regards, mwf -----Original Message----- From: oracle-l-bounce@xxxxxxxxxxxxx [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On Behalf Of Bobak, Mark Sent: Tuesday, September 12, 2006 4:50 PM To: charlottejanehammond@xxxxxxxxx; oracle-l@xxxxxxxxxxxxx Subject: RE: Plea for Query Tuning Help One more idea: with subq as (select id from my_table where rownum=1) SELECT /*+ ordered use_nl(nv) */ nv.* FROM subq sq, NASTY_VIEW nv where sq.id = nv.id; Hope that helps, -Mark -- Mark J. Bobak Senior Oracle Architect ProQuest Information & Learning "A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." --Robert A. Heinlein -----Original Message----- From: oracle-l-bounce@xxxxxxxxxxxxx [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On Behalf Of Charlotte Hammond Sent: Tuesday, September 12, 2006 4:31 PM To: oracle-l@xxxxxxxxxxxxx Subject: Re: Plea for Query Tuning Help Hi All, Thanks to all who have responded both on and off the list. A couple of people have asked me to post the plan but it is huge (due to NASTY_VIEW) so I'd rather not (at least yet!) as it'd probably be more off-putting than anything else :-) Essentially I just want the WHERE id = on NASTY_VIEW to treat the right value the same if it's a bind or if it's coming from a sub-query. Many good suggestions but no luck yet. I thought I'd post the results to see if anyone can spot anything from them... Here's an even simpler example: The Good case again: SELECT * FROM NASTY_VIEW WHERE id = :bind --> < 1 sec, (CBO=410) Any now some attempts to use a value from a SELECT. 1. Simple select: SELECT * FROM NASTY_VIEW WHERE id = (SELECT :bind FROM dual) --> long time (CBO=17378) 2. Try with a join instead: SELECT * FROM NASTY_VIEW nv, (SELECT :bind id FROM dual) b WHERE nv.id = b.id --> long time (CBO=32731) 3. Try putting in a row number limitation / pseudo-column SELECT * FROM NASTY_VIEW nv, (SELECT :bind id, rownum rn FROM dual WHERE rownum=1) b WHERE nv.id = b.id --> long time (CBO=17388) 4. Try NO_MERGE hint SELECT * FROM NASTY_VIEW WHERE id = (SELECT /*+ NO_MERGE */ :bind FROM dual) --> long time (CBO=17378) (Same plan as 1) (Same result if NO_MERGE hint in the outer SELECT) 5. Try FIRST_ROWS(n) hint SELECT /*+ FIRST_ROWS(1) */ FROM NASTY_VIEW WHERE id = (SELECT :bind FROM dual) --> long time (CBO=6030) (Best yet but still very slow compared to good case; other values of n were the same or worse) 6. Try hidden parameter tweaking ALTER SESSION SET "_UNNEST_SUBQUERY"=FALSE; --> same as 1 ALTER SESSION SET "_COMPLEX_VIEW_MERGING"=FALSE --> same as 1 Many thanks again for all your time. Charlotte > On 9/12/06, Charlotte Hammond > <charlottejanehammond@xxxxxxxxx> wrote: > > > > How can I prevent this happening so that it > "looks" > > like the first "fantastic" query? I've tried > messing > > with hints (NO_MERGE and PUSH_SUBQ) but I don't > know > > enough to do so effectively. Statistics are full > and > > up to date. This is Oracle 9.2.0.6. > > > > __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com -- //www.freelists.org/webpage/oracle-l -- //www.freelists.org/webpage/oracle-l -- //www.freelists.org/webpage/oracle-l -- //www.freelists.org/webpage/oracle-l