跪请刘大分析一个执行计划
尊敬的刘大:请教一下如下SQL语句的执行计划,SQL如下:select count(*) from (
SELECT /*+INDEX(IGW EMERALD_ISN_GRP_WIP11)*/ FAIL,GRP,MACTYPE,0,WIP
FROM EMERALD_ISN_GRP_WIP IGW, PQA_SETUP_TMP TMP_R, PQA_SETUP_TMP TMP_L, PQA_SETUP_TMP TMP_G
WHERE IGW.FIRST_DATE BETWEEN TO_DATE('20130105070000','YYYYMMDDHH24MISS') AND TO_DATE('20130106065959','YYYYMMDDHH24MISS')
AND IGW.ROUTE=TMP_R.VAL
AND IGW.GRP=TMP_G.VAL
AND IGW.LINE=TMP_L.VAL
AND TMP_R.TYP='ROUTE'
AND TMP_G.TYP='GRP'
AND TMP_L.TYP='LINE'
);索引EMERALD_ISN_GRP_WIP11字段如下:EMERALD_ISN_GRP_WIP11 ROUTE 1
EMERALD_ISN_GRP_WIP11 FIRST_DATE 2
EMERALD_ISN_GRP_WIP11 GRP 3
EMERALD_ISN_GRP_WIP11 LINE 4执行计划如下(来自v$SQL_PLAN):
0 SELECT STATEMENT
1 0 SORT AGGREGATE
2 1 NESTED LOOPS
3 2 MERGE JOIN CARTESIAN
4 3 MERGE JOIN CARTESIAN
5 4 SORT UNIQUE
6 5 TABLE ACCESS BY INDEX ROWID PQA_SETUP_TMP TABLE (TEMP)
7 6 INDEX RANGE SCAN PQA_SETUP_TMP1 INDEX "TYP"='LINE'
8 4 BUFFER SORT
9 8 SORT UNIQUE
10 9 TABLE ACCESS BY INDEX ROWID PQA_SETUP_TMP TABLE (TEMP)
11 10 INDEX RANGE SCAN PQA_SETUP_TMP1 INDEX "TYP"='GRP'
12 3 BUFFER SORT
13 12 SORT UNIQUE
14 13 TABLE ACCESS BY INDEX ROWID PQA_SETUP_TMP TABLE (TEMP)
15 14 INDEX RANGE SCAN PQA_SETUP_TMP1 INDEX "TYP"='ROUTE'
16 2 PARTITION RANGE SINGLE
17 16 INDEX RANGE SCAN EMERALD_ISN_GRP_WIP11 INDEX "IGW"."ROUTE"="VAL" AND "IGW"."FIRST_DATE">=TO_DATE(' 2013-01-05 07:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "IGW"."GRP"="VAL" AND "IGW"."LINE"="VAL" AND "IGW"."FIRST_DATE"<=TO_DATE(' 2013-01-06 06:59:59', 'syyyy-mm-dd hh24:mi:ss') ("IGW"."GRP"="VAL" AND "IGW"."LINE"="VAL")我的疑问是:访问谓词里已经有IGW.GRP和IGW.LINE(如红色)了,为什么在过滤谓词里还会再次出现IGW.GRP和IGW.LINE(如蓝色)?难道先By IGW.GRP和IGW.LINE去访问表,再用IGW.GRP和IGW.LINE去过滤前面访问出来的数据?会不会多此一举?
另外最想不通的是第17,16步和第2步,按照执行顺序来看,是先17,16(索引范围扫),再第2步(NL),既然第17步的时候已经BY索引扫出来结果了,还有必要再进行第2步的NL吗?是不是应该17步索引扫,然后直接By Rowid Access Table即可?而不应该是NL?
以上疑惑,麻烦抽点时间帮忙解答一下,感激不尽,谢谢! 奇怪,颜色没有正常显示:
这是访问谓词
"IGW"."ROUTE"="VAL" AND "IGW"."FIRST_DATE">=TO_DATE(' 2013-01-05 07:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "IGW"."GRP"="VAL" AND "IGW"."LINE"="VAL" AND "IGW"."FIRST_DATE"<=TO_DATE(' 2013-01-06 06:59:59', 'syyyy-mm-dd hh24:mi:ss')
这是过滤谓词
"IGW"."GRP"="VAL" AND "IGW"."LINE"="VAL"
一个好的问题 的基本要素:一个好的标题、 完整的版本信息、 完整的日志信息、 报错信息
请使用 sql health check 脚本 分析该SQL 然后上传HTML
http://www.oracledatabase12g.com/archives/sql-tuning-health-check-script.html
Liu Maclean(刘相兵 发表于 2014-1-8 17:19 static/image/common/back.gif
一个好的问题 的基本要素:一个好的标题、 完整的版本信息、 完整的日志信息、 报错信息
请使用 sql heal ...
唉,生产环境,怕呀……
页:
[1]