I agree with /*+ORDERED */ hint suggestion (in combination with inline
view).
I've seen cases, when inline view itself didn't do the job, but along with
/*+ORDERED */ hint proved to be a huge performance benefit.

So, try:

SELECT /*+ORDERED */ COUNT(a.phy_contract_id)
 FROM         accrued_and_paid a,
           (select phy_contract_id
            from phy_contracts
            where company_id = 16
            and   contract_type = 'IC') b
 WHERE             a.hold_payment_flag = 'Y'
 AND          b.phy_contract_id   = a.phy_contract_id;

or, may be changing order of "a" and "b".

Igor Neyman, OCP DBA
[EMAIL PROTECTED]


----- Original Message -----
To: "Multiple recipients of list ORACLE-L" <[EMAIL PROTECTED]>
Sent: Wednesday, March 20, 2002 2:50 PM


> [EMAIL PROTECTED] wrote:
> >
> > Steve,
> >
> > That query took about 52 seconds to run.
> >
> > Thanks
> > Rick
> >
> >
> >                     "Stephane
> >                     Faroult"               To:     Multiple recipients
of list ORACLE-L <[EMAIL PROTECTED]>
> >                     <sfaroult@oriol        cc:
> >                     ecorp.com>             Subject:     RE: More info on
sql query running slow
> >                     Sent by:
> >                     [EMAIL PROTECTED]
> >                     m
> >
> >
> >                     03/20/2002
> >                     10:53 AM
> >                     Please respond
> >                     to ORACLE-L
> >
> >
> >
> > Rick,
> >
> >   Curious to know how this would perform :
> >
> > SELECT   COUNT(a.phy_contract_id)
> > FROM         accrued_and_paid a,
> >           (select phy_contract_id
> >            from phy_contracts
> >            where company_id = 16
> >            and   contract_type = 'IC') b
> > WHERE             a.hold_payment_flag = 'Y'
> > AND          b.phy_contract_id   = a.phy_contract_id;
> >
> > >----- Original Message -----
> > >From: [EMAIL PROTECTED]
> > >To: Multiple recipients of list ORACLE-L
> > ><[EMAIL PROTECTED]>
> > >Sent: Wed, 20 Mar 2002 05:58:25
> > >
> > >Hi All,
> > >Oracle 8.1.6
> > >
> > >I have 2 tables which have been analyzed. The query
> > >takes about 30+ seconds
> > >to run.  If I run it many times it is faster as
> > >data gets loaded into
> > >buffer
> > >cache. I want to optimize when that is not the
> > >case.          All the fields in the
> > >query have a separate index created EXCEPT for
> > >ACCRUED_AND_PAID.hold_payment_flag.
> > >
> > >Phy_Contracts has 10,466 rows.
> > >Accrued_and_Paid has 820,919 rows.
> > >
> > >Here is output from explain plan
> > >
> > >SELECT STATEMENT   Cost = 1382
> > >  SORT AGGREGATE
> > >    NESTED LOOPS
> > >      TABLE ACCESS BY INDEX ROWID PHY_CONTRACTS
> > >           INDEX RANGE SCAN PCON_CMPY_FK
> > >      TABLE ACCESS BY INDEX ROWID ACCRUED_AND_PAID
> > >           INDEX RANGE SCAN ADPD_PCON_FK
> > >
> > >Any ideas what I can do to speed this query.
> > >
> > >SELECT   COUNT(a.phy_contract_id)
> > >FROM             accrued_and_paid a, phy_contracts b
> > >WHERE            a.hold_payment_flag = 'Y'
> > >AND         b.phy_contract_id   = a.phy_contract_id
> > >AND         b.company_id                 = 16
> > >AND         b.contract_type     = 'IC';
> > >
> > >List of single column index on PHY_CONTRACTS
> > >INDEX_NAME                               COLUMN_NAME
> > >------------------------------
> > >---------------------
> > >PCON_CONTRACT_TYPE_IDX        CONTRACT_TYPE
> > >PCON_CMPY_FK                             COMPANY_ID
> > >PCON_PK                            PHY_CONTRACT_ID
> > >
> > >List of single column index on ACCRUED_AND_PAID
> > >INDEX_NAME                               COLUMN_NAME
> > >------------------------------ ------------------
> > >ADPD_PCON_FK                             PHY_CONTRACT_ID
> > >
> > >
> > >Thanks
> > >Rick
> > >
>
> Yek. You should check the plan, there must be a full scan somewhere. I
> was hoping that the in-line view would be run first (assuming indices
> are efficient) and the the result used to pull the results from the
> other table.
> Two more things to try :
>  1)  /*+ ORDERED */ and the in-line view first in the FROM clause
>  2)  Not using an in-line view but a a.phy_contract_id in (select ..).
> In theory it shouldn't make any difference but the CBO has its
> mysterious ways sometimes.
>
> --
> Regards,
>
> Stephane Faroult
> Oriole Ltd
> --
> Please see the official ORACLE-L FAQ: http://www.orafaq.com
> --
> Author: Stephane Faroult
>   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).

-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Igor Neyman
  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