【DB筆試面試601】在Oracle中,給出下面執行計劃的執行順序。
- 2019 年 10 月 10 日
- 筆記
♣
題目部分
閱讀如下的執行計劃,給出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程式設計師面試筆試寶典》,作者:李華榮。