Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> query not picking up index
I have 2 tables BATCH and BATCH_PROGRAM.
BATCH
BATCH_PROGRAM
They both have exactly the same number of records (~6M). IDs between BATCH.BATCH_ID and BATCH_PROGRAM.BATCH_PROGRAM_BATCH_ID is exactly 1 to 1 matching and unique. BATCH_PROGRAM.BATCH_PROGRAM_ID has only 100 unique values.
The query below is taking over 1 min. From explain plan it shows that it's doing full scan on BATCH. The optimizer is not able to pick up the index(pk) on BATCH.BATCH_ID. An index hint will make it execute instantaneously. But we can't use a hint in the app for some practical reasons. Is there any way (reconstruct query, stats etc) to fix this? Thanks!
SELECT b.batch_name
FROM BATCH b, BATCH_PROGRAM bp
WHERE b.BATCH_ID=bp.BATCH_PROGRAM_BATCH_ID
AND bp.BATCH_PROGRAM_PROGRAM_ID = 555;
Execution Plan
P.S. oracle 9.2.0.8.0 EE on Solaris 10. Schema statistics is collected fully by dbms_stats procedure. And please don't ask me why have 2 tables instead of 1. This is a 3rd party db... Received on Sun Apr 29 2007 - 19:23:40 CDT