♣
题目部分
阅读如下的执行计划,给出SQL的执行顺序。
-----------------------------------------
| Id | Operation
-----------------------------------------
| 0 | SELECT STATEMENT
| 1 | SORT AGGREGATE
| 2 | VIEW
| 3 | UNION-ALL
|* 4 | FILTER
|* 5 | HASH JOIN
| 6 | TABLE ACCESS FULL
|* 7 | TABLE ACCESS FULL
|* 8 | TABLE ACCESS BY INDEX ROWID
|* 9 | INDEX UNIQUE SCAN
| 10 | NESTED LOOPS
| 11 | INDEX FULL SCAN
| 12 | TABLE ACCESS CLUSTER
|* 13 | INDEX UNIQUE SCAN
-------------------------------------------
♣
答案部分
分析:采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID,那么就最先执行,首先,6、7、9、13最右,所以,6,7最先执行做HASH JOIN,为6,7,5。
第二,8有子节点,接下来是9,8。
第三,HASH的结果和8的结果做FILTER过滤。
第四,10这个节点根据原则是11,13,12,10。
第五,剩下依次是3,2,1,0。
所以,该图的执行顺序是6,7,5,9,8,4,11,13,12,10,3,2,1,0。
本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。