nested loop心得

wenhual43發表於2012-09-11
今天調優SQL,語句如下:
       select    a.seq_captureway as CAPTUREWAYNO,
       a.dd_captureway  as CAPTUREWAYCODE,
       a.seq_animalmoni as ANIMALMONINO,
 b.nm_worker as WORKERNM
  from rat_caveflea a, rat_worker b
 where a.seq_worker = b.seq_worker(+)
   and a.seq_animalmoni = '11308'
   and a.ZONECODE like '53%'
原來的執行計劃有下面一段
  NESTED LOOPS OUTER
    TABLE ACCESS  FULL RAT_CAVEFLEA FILTER("A"."SEQ_ANIMALMONI"='11308' AND "A"."ZONECODE" LIKE '53%')
   TABLE ACCESS BY INDEX ROWID REDFIS RAT_WORKER 
    INDEX UNIQUE SCAN   PK_RAT_WORKER    access("A"."SEQ_WORKER"="B"."SEQ_WORKER"(+))  
新增索引create index IDX_rat_caveflea_AZ on rat_caveflea(seq_animalmoni,ZONECODE),rat_caveflea 表沒有全表掃描了。
發現:雖然有a.seq_worker = b.seq_worker(+),但是在巢狀迴圈裡,a表只要能通過其他過濾條件過濾就行了,在2個表關聯的地方沒有必要建立索引。
測試:建立索引 create index IDX_rat_caveflea_AZW on rat_caveflea(seq_animalmoni,ZONECODE,seq_worker)nologging;分析表後,發現還是用的索引IDX_rat_caveflea_AZ。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25027760/viewspace-743144/,如需轉載,請註明出處,否則將追究法律責任。

相關文章