Oracle
並行執行順序
哪項關於並行執行計劃的說法是正確的?
- A. CUSTOMERS 和 SALES 表同時並行掃描,然後並行連接。
- B. 首先並行掃描 CUSTOMERS 表,然後並行掃描 SALES 表,然後將它們串列連接。
- C. 首先並行掃描 SALES 表,然後並行掃描 CUSTOMERS 表,然後將它們並行連接。
- D. CUSTOMERS 和 SALES 表同時並行掃描,然後串列連接。
- E. 首先並行掃描 CUSTOMERS 表,然後並行掃描 SALES 表,然後將它們並行連接。
我認為 E 是正確的,但正確答案是 A。為什麼?
B、D 不正確:
join是並行進行的,圖片上只有1次串列操作,只有一次parallel->serial(P->S)轉換,也就是query coordinator收集結果的時候。
A (, D) 不正確:
並行 SQL 使用生產者-消費者模型。一組讀取表,另一組建構/探測雜湊表,它們不會同時讀取單獨的表。
C 不正確:
只有 1 個 DFO (
:TQ1
),執行順序可以通過虛擬表或表隊列 (:TQ1000x
) 的順序輕鬆辨識。對於多個 DFO 不一定如此,但它在 1 個 DFO 內。:TQ10000
來之前:TQ10001
,但:TQ10000
不一定來之前:TQ20000
。閱讀有關此的更多資訊:https://jonathanlewis.wordpress.com/2015/12/21/parallel-plans-2/
所以要讀取的第一個表是
CUSTOMER
,不是SALES
。E 正確:
嗯,這就是它的工作原理,但這不是一個真正的解釋。更容易證明其他選項是錯誤的。