Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> Query optimization.
I have a simple query with lots of inner and outer joins.
Is there a way to determine what columns in what tables should be indexed? Currently the foreign keys are indexed, and columns that are in the WHERE and ORDER BY clauses in the T_MDCLCLM table.
With IN in the WHERE clause:
WHERE
MCLM_ID IN (46504, 55468, 28487, 72037, 72060, 13452, 44502, 44556,
44984, 49386, 49781)
it runs sloooooow.
If I change it to
WHERE
MCLM_ID = 46504
it runs fast using the indexes.
See execution plans at the end. Any clues?
SELECT
MCLM_ID, MCLM_C4C_ID, MCLM_CLM_ID, MCLM_FRSTDT_OF_SRVC,
MCLM_LAS_DT_OF_SRVC,
MCLM_AMNTCRGD, MCLM_AMNTPAID, MCLM_AMNTALWD, MCLM_AMNTDDCT,
MCLM_AMNTCPAY,
MBUR_MSTR.MBUR_COB,
ICD9DX1.IC9D_ICD9DGESCODE, ICD9DX1.IC9D_LONGDSCN, ICD9DX2.IC9D_ICD9DGESCODE, ICD9DX2.IC9D_LONGDSCN, ICD9DX3.IC9D_ICD9DGESCODE, ICD9DX3.IC9D_LONGDSCN,HTCD.HTCD_HCCSCPT_CODE, HTCD.HTCD_CPT_DSCN,
MCLM_PLCEOF_SRVCCODE, SENG_MSTR.USR_FRSTNAM, SENG_MSTR.USR_MDLENAM, SENG_MSTR.USR_LAS_NAM, MCLM_SENGPVDR, RFNG_MSTR.USR_FRSTNAM, RFNG_MSTR.USR_MDLENAM, RFNG_MSTR.USR_LAS_NAM, MCLM_RFNGPVDRFROM
HASH JOIN (OUTER) (Cost=1120621 Card=2565300423 Bytes=5995107088551)
HASH JOIN (OUTER) (Cost=13593 Card=34716692 Bytes=71724685672)
HASH JOIN (Cost=484 Card=469828 Bytes=843341260) TABLE ACCESS (FULL) OF T_DGIS (Cost=16 Card=30222 Bytes=8190162) HASH JOIN (OUTER) (Cost=189 Card=6358 Bytes=9689592) HASH JOIN (OUTER) (Cost=45 Card=6358 Bytes=7146392) HASH JOIN (OUTER) (Cost=33 Card=549 Bytes=595665) HASH JOIN (OUTER) (Cost=15 Card=549 Bytes=376065) HASH JOIN (OUTER) (Cost=10 Card=47 Bytes=30362) NESTED LOOPS (OUTER) (Cost=5 Card=47 Bytes=28811) INLIST ITERATOR TABLE ACCESS (BY INDEX ROWID) OF T_MDCLCLM (Cost=1 Card=4 Bytes=2296) INDEX (RANGE SCAN) OF PK_T_MDCLCLM (UNIQUE) (Cost=2 Card=2) TABLE ACCESS (BY INDEX ROWID) OF T_USR (Cost=1 Card=12 Bytes=468) INDEX (UNIQUE SCAN) OF UK_MBUR (UNIQUE) TABLE ACCESS (FULL) OF T_USR (Cost=4 Card=4738 Bytes=156354) TABLE ACCESS (FULL) OF T_USR (Cost=4 Card=4738 Bytes=184782) TABLE ACCESS (FULL) OF T_USR (Cost=4 Card=4738 Bytes=1895200) TABLE ACCESS (FULL) OF T_USR (Cost=4 Card=4738 Bytes=184782) TABLE ACCESS (FULL) OF T_USR (Cost=4 Card=4738 Bytes=1895200) TABLE ACCESS (FULL) OF T_DGIS (Cost=16 Card=30222 Bytes=8190162)TABLE ACCESS (FULL) OF T_DGIS (Cost=16 Card=30222 Bytes=8190162) TABLE ACCESS (FULL) OF T_SRVC (Cost=84 Card=174306 Bytes=47236926)
Execution plan with =:
SELECT STATEMENT Optimizer=CHOOSE (Cost=14 Card=1 Bytes=2601)
SORT (ORDER BY) (Cost=14 Card=1 Bytes=2601)
NESTED LOOPS (OUTER) (Cost=14 Card=1 Bytes=2601)
NESTED LOOPS (OUTER) (Cost=13 Card=1 Bytes=2575)
NESTED LOOPS (OUTER) (Cost=12 Card=1 Bytes=2175)
NESTED LOOPS (Cost=11 Card=1 Bytes=1775) NESTED LOOPS (OUTER) (Cost=10 Card=1 Bytes=1504) NESTED LOOPS (OUTER) (Cost=9 Card=1 Bytes=1233) NESTED LOOPS (OUTER) (Cost=8 Card=1 Bytes=962) NESTED LOOPS (OUTER) (Cost=7 Card=1 Bytes=691) NESTED LOOPS (OUTER) (Cost=6 Card=1 Bytes=652) NESTED LOOPS (OUTER) (Cost=5 Card=1 Bytes=613) TABLE ACCESS (BY INDEX ROWID) OF T_MDCLCLM (Cost=1 Card=4 Bytes=2296) INDEX (RANGE SCAN) OF PK_T_MDCLCLM (UNIQUE) (Cost=1 Card=2) TABLE ACCESS (BY INDEX ROWID) OF T_USR (Cost=1 Card=12 Bytes=468) INDEX (UNIQUE SCAN) OF UK_PRV (UNIQUE) TABLE ACCESS (BY INDEX ROWID) OF T_USR (Cost=1 Card=12 Bytes=468) INDEX (UNIQUE SCAN) OF UK_PRV (UNIQUE) TABLE ACCESS (BY INDEX ROWID) OF T_USR (Cost=1 Card=12 Bytes=468) INDEX (UNIQUE SCAN) OF UK_MBUR (UNIQUE) TABLE ACCESS (BY INDEX ROWID) OF T_DGIS (Cost=1 Card=74 Bytes=20054) INDEX (UNIQUE SCAN) OF UK_IC9D (UNIQUE) TABLE ACCESS (BY INDEX ROWID) OF T_DGIS (Cost=1 Card=74 Bytes=20054) INDEX (UNIQUE SCAN) OF UK_IC9D (UNIQUE) TABLE ACCESS (BY INDEX ROWID) OF T_SRVC (Cost=1 Card=426 Bytes=115446) INDEX (UNIQUE SCAN) OF UK_HTCD (UNIQUE) TABLE ACCESS (BY INDEX ROWID) OF T_DGIS (Cost=1 Card=74 Bytes=20054) INDEX (UNIQUE SCAN) OF UK_IC9D (UNIQUE) TABLE ACCESS (BY INDEX ROWID) OF T_USR (Cost=1 Card=1 Bytes=400) INDEX (UNIQUE SCAN) OF PK_T_USR (UNIQUE) TABLE ACCESS (BY INDEX ROWID) OF T_USR (Cost=1 Card=1 Bytes=400) INDEX (UNIQUE SCAN) OF PK_T_USR (UNIQUE)TABLE ACCESS (BY INDEX ROWID) OF T_USR (Cost=1 Card=1 Bytes=26) INDEX (UNIQUE SCAN) OF PK_T_USR (UNIQUE) Received on Fri Aug 06 2004 - 10:43:27 CDT