SQL Server 生成具有并行性和 TOP 语句的查询计划

Ber*_*fel 5 sql-server parallelism execution-plan

我有两个简单的查询:

SELECT TOP(20) * FROM Clients ORDER BY City
Run Code Online (Sandbox Code Playgroud)
SELECT TOP(20) Id, Name, City FROM Clients ORDER BY City
Run Code Online (Sandbox Code Playgroud)

在第一种情况下我得到这样的结果

ID 姓名 城市 更多专栏
6 6人 无效的 ...
2 2人 无效的 ...
3 3号人 无效的 ...

在第二种情况下,我得到这样的结果 在第一种情况下,我得到这样的结果

ID 姓名 城市
2 2人 无效的
3 3号人 无效的
6 6人 无效的

请注意,顺序不同。当然,我理解,因为 City 对于这三个人来说是 NULL,所以不一定能保证唯一的顺序。

然而,在检查查询计划时,我注意到第一个查询使用了并行性 在此输入图像描述

第二个查询没有:

在此输入图像描述

在阅读有关并行查询处理的文档后,它特别提到某些构造会抑制并行性,例如 TOP 运算符。

除了并行性之外,唯一显着的区别是并行计划的 Top N Sort 节点的估计 I/O 成本为 16,而非并行查询计划的 Top N Sort 节点仅具有估计 I/O 成本成本0.01

所以我的问题是:为什么当我使用 TOP 运算符时它仍然会使用并行性,即使微软声明它应该抑制该机制?

Eri*_*ing 4

一饮而尽

该部分的文档完全是一场灾难。

TOP 运算符仅在计划中引入一个消耗数据的串行区域。这正是您的计划所显示的内容,Gather Streams 运算符先于 TOP 运算符。

请注意,TOP N 排序运算符的限制方式与(演示)TOP 强制并行区域的方式不同。

坚果