Oracle

並行執行順序

  • January 16, 2017

SQL 語句和 Paln

哪項關於並行執行計劃的說法是正確的?

  • 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 正確:

嗯,這就是它的工作原理,但這不是一個真正的解釋。更容易證明其他選項是錯誤的。

引用自:https://dba.stackexchange.com/questions/161167