今天调优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博客 ” ,链接:https://blog.itpub.net/25027760/viewspace-743144/
,如需转载,请注明出处,否则将追究法律责任。