2015-07-10 66 views
0

什麼是Parallelism(Distribute Streams)Execution plan中的操作。爲什麼它會增加先前操作的行數。什麼是執行計劃中的並行(分發流)

查詢:

SELECT TOP 5000 MM.MEMBER_ID, 
       MM.MEMBER_NO, 
       MM.MEMBER_NAME, 
       MM.TRADE_CLASS, 
       MT.DESCRIPTION, 
       MS.DESCRIPTION, 
       MAI.ADDRESS_1, 
       MAI.ADDRESS_2, 
       MAI.CITY, 
       MAI.STATE, 
       MAI.ZIP 
FROM MEMBER_MASTER MM 
     INNER JOIN MEMBER_TYPE MT 
       ON MT.CODE = MM.MEMBER_TYPE 
     INNER JOIN MEMBER_STATUS MS 
       ON MS.CODE = MM.MEMBER_STATUS 
     INNER JOIN MEMBER_ADDRESS_INFO MAI 
       ON MM.MEMBER_ID = MAI.MEMBER_ID 
WHERE MAI.PRIMARY_ADDRESS_FLAG = 'YES' 

執行計劃:

enter image description here

從你可以清楚地看到,該行計數從增加到上述執行計劃1,272,672。爲什麼會發生?

回答

3

該系統已決定可以從並行執行某些處理中受益。在這種情況下,顯然決定讓32個獨立的線程使用這組行(1272672 = 39771 * 32)。它不應該成爲一個值得關注的問題 - 通常情況下 - 後面的(Gather Streams)操作會消除「重複」行。

+0

它會導致任何性能問題。還有哪個'operation'(Join etc ..)會導致執行計劃者使用'Parallelism(Distribute Streams)' –

+2

@Fireblade - 它*不應該引起問題 - 但請注意我非常謹慎。從歷史上看,優化器有時會並行化操作,這些操作在串行過程中會更快,或者並行性更低。這就是爲什麼如果你需要強制優化器放棄並行計劃,那麼[查詢提示稱爲'MAXDOP'](https://msdn.microsoft.com/en-us/library/ms181714.aspx)。不要碰它,除非你已經表現出性能問題*。並行性在計劃中被多次使用以支持連接操作。 –

+0

感謝您的澄清:) –