Query-Performance

Oracle中子查詢和外查詢使用並行度“/+parallel(4)/”在性能上的區別

  • July 29, 2020

我有以下查詢:

select /*+parallel(4)*/ ---> First Location
      <Desc_1> Amount,
      <Desc_2> Amount,
      <Desc_3> Amount
from (select /*+parallel(4)*/ ---> Second Location
            <Column_1>,
            <Column_2>
     from <Example_Table>
     where <Conditions>
     )
pivot(sum(Column_1) Amount
for <Column_2> in (1 as <Desc_1>,
                  2 as <Desc_2>,
                  3 as <Desc_3>)
                  );

關鍵是<Example_Table>那張桌子很大,我想問在哪裡最好使用/*+parallel(4)*/SubQuery在外部選擇或外部選擇中使用它更好嗎?如果我們/*+parallel(4)*/在外部和內部選擇中都使用怎麼辦?對性能不利嗎?

好吧,如果您只有一個表,並且您的外部選擇沒有訪問其他表,我猜想“第二個位置”將是優化器查看的唯一一個。在實踐中,易於測試:只需對這兩個選項做一個解釋計劃,然後看看。然後以兩種方式呼叫它,並驗證會發生什麼。

Oracle 非常聰明地為並行查詢做正確的事情。如果兩個選項都沒有生成並行執行計劃,請查看以下參數:

select name, value from v$parameter where name like 'parallel%' order by 1;

並查看有關“初始化參數”的Oracle 數據庫參考部分,例如parallel_adaptive_multi_user了解詳細資訊。

所以如果你把它放在兩個地方都不會發生什麼可怕的事情,但一定要先在開發環境中測試。

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