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

Home -> Community -> Usenet -> c.d.o.misc -> Re: Improve this querry!?

Re: Improve this querry!?

From: Mark Schubert <Mark.Schubert_at_MyRealBox.com>
Date: 13 Nov 2003 11:24:33 -0800
Message-ID: <9c9c6d17.0311131124.49d579d4@posting.google.com>


"mcstock" <mcstockspamplug_at_spamdamenquery.com> wrote in message news:<D4adnaFGlJ7IIC-iRVn-tg_at_comcast.com>...
> 'AND medstatus NOT in ('T')' will very likely not use an index
>
> there's no reason why
> 'AND medstatus like 'S%')' won't work -- looks like you weren't using the
> 'LIKE' operator, but the IN operator
>
> 1) try LIKE 'S%'
> 2) post the plan

19:14:08 SQL> select operation, options, object_name, id, parent_id, position from plan_table;

OPERATION                      OPTIONS                       
OBJECT_NAME                            ID  PARENT_ID   POSITION
------------------------------ ------------------------------
------------------------------ ---------- ---------- ----------
SELECT STATEMENT                                                      
                               0                     6
NESTED LOOPS                                                          
                               1          0          1
TABLE ACCESS                   BY INDEX ROWID                
MED_MT_TB                               2          1          1
INDEX                          RANGE SCAN                     PKYMT01 
                               3          2          1
FILTER                                                                
                               4          3          1
TABLE ACCESS                   FULL                          
MRD_MT_TB                               5          4          1
TABLE ACCESS                   BY INDEX ROWID                
MRD_MT_TB                               6          1          2
INDEX                          RANGE SCAN                     PKYMT03 
                               7          6          1

8 rows selected.

That's the plan for this query that took 104 seconds to run. Way too slow.

explain plan for
SELECT /*+ INDEX(MED_MT_TB IX0101) */
   med.inputserialnumber,
   inputconnectionnumber,
   rejectedmessage,
   destinationnumber,
   mrdstatus,
   medstatus
   FROM

      mrd_mt_tb mrd,
      med_mt_tb med
   WHERE
      mrd.inputserialnumber = med.inputserialnumber(+)
      AND med.inputserialnumber > HEXTORAW('3FB0349000000000')  --    
Mon Nov 11 01:00:00
      AND med.inputserialnumber < HEXTORAW('3FB036E800000000')  --    
Mon Nov 11 01:10:00
      AND medstatus <> 'T'
      AND med.inputserialnumber NOT IN 
         (SELECT /*+ HASH_AJ */
            med.inputserialnumber
         FROM 
            mrd_mt_tb
         WHERE 
            mrdstatus IS NOT NULL)

/ Received on Thu Nov 13 2003 - 13:24:33 CST

Original text of this message

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