【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程式設計師面試筆試寶典》,作者:李華榮。