| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.misc -> Hint Help!
I'm having trouble getting Oracle to recognize an INDEX hint, and I'm hoping someone out there can tell me what's going on. The query runs best when using the index on the DEPT field, as I know from using the RULE hint, and as you can tell by comparing the times of the 2 following queries. I'd like to just tell the optimizer which index to use, but it seems to ignore my request. Below is the same query with 1) the index hint and 2) the RULE hint.
First, here's the query I want to run and the ensuing explain plan:
SELECT /*+ INDEX(TRANSACTION TRANSACT_DEPT) */
AL9.FUND, AL9.PROJ, AL9.OBJ, AL9.AMOUNT, AL9.DEPT
AL9.FISC_YR='1996-97' AND
AL9.DEPT IN ('1330','1333','1335','1336','1337','1338') AND
AL9.OBJ BETWEEN '52000' AND '52999';
<<Returned rows omitted>>
12941 rows selected.
real: 3617061
Execution Plan
0 SELECT STATEMENT Cost=2424 Optimizer=CHOOSE 1 0 TABLE ACCESS (BY ROWID) OF 'TRANSACTION' 2 1 INDEX (RANGE SCAN) OF 'TRANSACT_OBJ' Statistics
8 recursive calls
7 db block gets
2682958 consistent gets
473165 physical reads
698 redo size
487591 bytes sent via SQL*Net to client
18528 bytes received via SQL*Net from client
2591 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
12941 rows processed
For comparitive purposes, and to assure you that there is a TRANSACT_DEPT index, here is the same query information when I apply the rule hint:
SELECT /*+ RULE */
AL9.FUND, AL9.PROJ, AL9.OBJ, AL9.AMOUNT, AL9.DEPT
AL9.FISC_YR='1996-97' AND
AL9.DEPT IN ('1330','1333','1335','1336','1337','1338') AND
AL9.OBJ BETWEEN '52000' AND '52999';
12941 rows selected.
real: 80666
Execution Plan
0 SELECT STATEMENT Optimizer=HINT: RULE 1 0 CONCATENATION
2 1 TABLE ACCESS (BY ROWID) OF 'TRANSACTION' 3 2 AND-EQUAL 4 3 INDEX (RANGE SCAN) OF 'TRANSACT_DEPT' 5 3 INDEX (RANGE SCAN) OF 'TRANSACT_FISC_YR' 6 1 TABLE ACCESS (BY ROWID) OF 'TRANSACTION' 7 6 AND-EQUAL 8 7 INDEX (RANGE SCAN) OF 'TRANSACT_DEPT' 9 7 INDEX (RANGE SCAN) OF 'TRANSACT_FISC_YR' 10 1 TABLE ACCESS (BY ROWID) OF 'TRANSACTION' 11 10 AND-EQUAL 12 11 INDEX (RANGE SCAN) OF 'TRANSACT_DEPT' 13 11 INDEX (RANGE SCAN) OF 'TRANSACT_FISC_YR' 14 1 TABLE ACCESS (BY ROWID) OF 'TRANSACTION' 15 14 AND-EQUAL 16 15 INDEX (RANGE SCAN) OF 'TRANSACT_DEPT' 17 15 INDEX (RANGE SCAN) OF 'TRANSACT_FISC_YR' 18 1 TABLE ACCESS (BY ROWID) OF 'TRANSACTION' 19 18 AND-EQUAL 20 19 INDEX (RANGE SCAN) OF 'TRANSACT_DEPT' 21 19 INDEX (RANGE SCAN) OF 'TRANSACT_FISC_YR' 22 1 TABLE ACCESS (BY ROWID) OF 'TRANSACTION' 23 22 AND-EQUAL 24 23 INDEX (RANGE SCAN) OF 'TRANSACT_DEPT' 25 23 INDEX (RANGE SCAN) OF 'TRANSACT_FISC_YR'
Statistics
8 recursive calls
7 db block gets
257293 consistent gets
5356 physical reads
680 redo size
487591 bytes sent via SQL*Net to client
18539 bytes received via SQL*Net from client
2591 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
12941 rows processed
Any help is greatly appreciated!
--brad skiles, dba
Purdue University
bwskiles_at_adpc.purdue.edu Received on Fri May 23 1997 - 00:00:00 CDT
![]() |
![]() |