各位高手,下面我强制使用了 USE_HASH, 但是 执行计划里显示的还是 NESTED LOOP. 很郁闷。
DB VERSION: 10.1.0.2
CBO, 每周相关表分析一次。
INSERT /*+ USE_HASH(REQDTF,MORLSF,ITEMM_A,ITEMM_B,REQDTF_AVL_TEMP) */ INTO REQDTF_AVL_TEMP
( FPMODRFLG , FOYAODRNO ,FOYAODRNO2 ,FREQSEQNO, FSTRSEQNO, FKOITEMNO ,FLOTNO ,FLOTNO2, FKOWHCD ,FKOLCTCD ,FREQDTE ,
FFIRMREQ , FSTRUUNIT , FISSWAY , FISSTTL , FNOREQQTY , FREQDTFLG,FPRJNO , FITEMNO , FMFGODRSTS , FMOISSFLG ,
FOYAITEM_FUNIT , FMFGODRQTY, FITEMTYP , FPASTFLG ,FITMCNVTYP , FUNEXCHG , FKOITEM_FUNIT ) SELECT REQDTF.FPMODRFLG,
REQDTF.FOYAODRNO,REQDTF.FOYAODRNO2,REQDTF.FREQSEQNO,REQDTF.FSTRSEQNO,REQDTF.FKOITEMNO,REQDTF.FLOTNO,REQDTF.FLOTNO2,
REQDTF.FKOWHCD, REQDTF.FKOLCTCD, CASE WHEN REQDTF.FREQDTE <= :B7 THEN :B7 ELSE REQDTF.FREQDTE END , REQDTF.FFIRMREQ,
REQDTF.FUUNIT, REQDTF.FISSWAY, DECODE(REQDTF.FFIRMREQ,0,DECODE(REQDTF.FSPAREITEM,REQDTF.FKOITEMNO,REQDTF.FISSTTL,
LEAST(REQDTF.FISSTTL,REQDTF.FFIRMREQ)),REQDTF.FISSTTL) REQDTF_FISSTTL, REQDTF.FNOREQQTY,REQDTF.FREQDTFLG,
MORLSF.FPRJNO,MORLSF.FITEMNO,MORLSF.FMFGODRSTS,MORLSF.FMOISSFLG,ITEMM_A.FUNIT,MORLSF.FMFGODRQTY,ITEMM_A.FITEMTYP,
CASE WHEN REQDTF.FREQDTE <= :B7 THEN 'Y' ELSE 'N' END, ITEMM_B.FITMCNVTYP, 1, ITEMM_B.FUNIT FROM MORLSF,REQDTF,
ITEMM ITEMM_A,ITEMM ITEMM_B WHERE ( MORLSF.FMFGODRSTS <> 'C' )
AND ( MORLSF.FMFGODRSTS <> 'H' ) AND ( REQDTF.FREQDTE <= :B6 )
AND ( FFIRMREQ - FISSTTL - FNOREQQTY > 0 )
AND ( MORLSF.FMFGODRSTS <> :B5 )
AND ( MORLSF.FITEMNO = ITEMM_A.FITEMNO )
AND ( REQDTF.FOYAODRNO = MORLSF.FMFGODRNO )
AND ( REQDTF.FPMODRFLG = 'M' )
AND ( REQDTF.FPMODRFLG = MORLSF.FPMODRFLG )
AND ( RTRIM(REQDTF.FKOITEMNO) LIKE RTRIM(:B4 ) )
AND ( RTRIM(REQDTF.FKOWHCD) LIKE RTRIM(:B3 ) )
AND ( REQDTF.FREQDTFLG <> :B2 )
AND ( REQDTF.FKOITEMNO = ITEMM_B.FITEMNO)
AND ( RTRIM(ITEMM_B.FITEMTYP) LIKE :B1 )
AND ( NVL(MORLSF.FMOISSFLG,'N') <> 'C');
下面是执行计划:
INSERT STATEMENT