什么是执行计划中的并行性(分发流)

Pரத*_*ீப் 1 sql sql-server sql-execution-plan

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'
Run Code Online (Sandbox Code Playgroud)

执行计划:

在此输入图像描述

从上面的执行计划可以清楚地看到行数从39,771增加到1,272,672。为什么会发生这种情况?

Dam*_*ver 5

系统认为它可以从并行执行某些处理中受益。在本例中,显然决定让 32 个独立线程处理该行集 (1272672 = 39771*32)。一般来说,这不应该引起关注,并且“重复”行将被稍后的(Gather Streams)操作消除。

  • @Fireblade - 它*不应该*引起问题 - 但请注意我非常谨慎。从历史上看,优化器有时会并行化操作,这些操作会比串行进程更快,或者并行性较低。这就是为什么如果您需要强制优化器放弃并行计划,就会有一个[名为“MAXDOP”的查询提示](https://msdn.microsoft.com/en-us/library/ms181714.aspx)。不过,除非您已经证明存在性能*问题*,否则请勿触摸它。计划中多次使用并行性来“支持”连接操作。 (2认同)