Re: How to use index

From: Ken <wingkei_leung_at_hotmail.com>
Date: 6 Nov 2003 23:00:53 -0800
Message-ID: <63029411.0311062300.493ad399_at_posting.google.com>


Actually the whole sql is a join with 2 tables:

select

	a.INDEXED_COLUMN1,
	b.INDEXED_COLUMN2,
	b.COLUMN2
	b.COLUMN3
	b.COLUMN4

from
 tableA a, tableB b         

where

	a.INDEXED_COLUMN1 IN ('A','B','C','D') and
	a.INDEXED_COLUMN2=b.INDEXED_COLUMN1 and
        b.INDEXED_COLUMN2 > SYSDATE

TableA has a composite index for column2 and column1 (a.INDEXED_COLUMN2, a.INDEXED_COLUMN1). TableB has a composite index for column1 and column2 (b.INDEXED_COLUMN1, b.INDEXED_COLUMN2)

The optimizer does not use the index in tableB when the 2 tables joined together. Instead, it does a full scan. The trace is listed below:

Execution Plan


   0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=4 Bytes=124)    1 0 HASH JOIN (Cost=5 Card=4 Bytes=124)

   2    1     INDEX (FAST FULL SCAN) OF 'IX_TABLE_A_COL2_COL1' (NON
          -UNIQUE) (Cost=1 Card=4 Bytes=24)

   3    1     TABLE ACCESS (FULL) OF 'TABLE_B' (Cost=3 Card=16 Bytes=4
          00)

Statistics


          0  recursive calls
          8  db block gets
        111  consistent gets
          0  physical reads
          0  redo size
        854  bytes sent via SQL*Net to client
       1039  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          7  sorts (memory)
          0  sorts (disk)
          4  rows processed

Thanks Received on Fri Nov 07 2003 - 08:00:53 CET

Original text of this message