Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Query optimization.
Hi from Paris
as you can see, the main differences between both plans is the use of "hash joins" when specifiying IN predicate....
in this case, I would try:
- to test with the "USE_NL" hint - to test with the "FIRST_ROWS" hint - if this can be done, to disable hash joins (with hash_join_enabled =false) -> be careful !!!
Cdlt
"Kurta" <submit_at_galleus.com> a écrit dans le message de
news:efcb1994.0408060743.10c1a6ac_at_posting.google.com...
> 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_RFNGPVDR
> FROM
> T_MDCLCLM
> INNER JOIN
> T_USR MBUR ON MCLM_PAT_ID = MBUR.MBUR_ID
> LEFT OUTER JOIN
> T_SRVC HTCD ON MCLM_CPT4CODE = HTCD.HTCD_ID
> LEFT OUTER JOIN
> T_USR SENG ON MCLM_SENGPVDR = SENG.PRV_ID
> LEFT OUTER JOIN
> (SELECT IC9D_ID, IC9D_ICD9DGESCODE, IC9D_LONGDSCN FROM T_DGIS)
> ICD9DX1 ON MCLM_ICD9DX1 = ICD9DX1.IC9D_ID
> LEFT OUTER JOIN
> (SELECT IC9D_ID, IC9D_ICD9DGESCODE, IC9D_LONGDSCN FROM T_DGIS)
> ICD9DX2 ON MCLM_ICD9DX2 = ICD9DX2.IC9D_ID
> LEFT OUTER JOIN
> (SELECT IC9D_ID, IC9D_ICD9DGESCODE, IC9D_LONGDSCN FROM T_DGIS)
> ICD9DX3 ON MCLM_ICD9DX3 = ICD9DX3.IC9D_ID
> LEFT OUTER JOIN
> T_USR RFNG ON MCLM_RFNGPVDR = RFNG.PRV_ID
> LEFT OUTER JOIN
> (SELECT MBUR_COB, USR_ID FROM T_USR) MBUR_MSTR ON
> NVL(MBUR.USR_MRGEMSTR, MBUR.USR_ID) = MBUR_MSTR.USR_ID
> LEFT OUTER JOIN
> T_USR SENG_MSTR ON NVL(SENG.USR_MRGEMSTR, SENG.USR_ID) =
> SENG_MSTR.USR_ID LEFT OUTER JOIN
> T_USR RFNG_MSTR ON NVL(RFNG.USR_MRGEMSTR, RFNG.USR_ID) =
> RFNG_MSTR.USR_ID WHERE
> MCLM_ID IN (46504, 55468, 28487, 72037, 72060, 13452, 44502, 44556,
> 44984, 49386, 49781)
> ORDER BY
> MCLM_FRSTDT_OF_SRVC DESC, MCLM_ID ASC
>
> Execution plan with IN:
> SELECT STATEMENT Optimizer=CHOOSE (Cost=13083881442 Card=1093269573632
> Bytes=2851247048032260)
> SORT (ORDER BY) (Cost=13083881442 Card=1093269573632
> Bytes=2851247048032260)
> HASH JOIN (OUTER) (Cost=97928308 Card=1093269573632
> Bytes=2851247048032260)
> 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 Sat Aug 07 2004 - 21:19:56 CDT
![]() |
![]() |