在 SQL Server 中,为什么聚簇索引的向后扫描不能不使用并行性?

Kis*_*ari 22 sql-server clustered-index

我一直在阅读有关 SQL Server 内部结构的文章,并且每本书或博客都提到了有关反向扫描的内容。

聚集索引的向后扫描不能使用并行性

唯一说某事的帖子是下面的这个帖子。这篇文章说 SQL Server 团队没有实现反向扫描所需的优化。https://www.itprotoday.com/sql-server/descending-indexes

由于叶级页面是使用双向链表链接的,我不明白为什么向后扫描与向前扫描不同。任何澄清真的很感激。

Dan*_*man 19

所引用的文章特别说明了 SQL Server 2008(从 CU6 开始)中没有并行化后向排序扫描的原因不是技术问题,而是因为客户没有请求该功能并且开发团队没有费心实施它。

请注意,这篇文章是近 10 年前在现在不受支持的 SQL Server 2008 版本的上下文中编写的。存储引擎和优化器发生了重大变化。也就是说,我仍然看到了一个平行的计划ASC查询和DESCSQL Server 2017 上文章演示查询版本的串行计划:

SELECT *
FROM dbo.Orders
WHERE orderid <= 100000
ORDER BY orderdate ASC;

SELECT *
FROM dbo.Orders
WHERE orderid <= 100000
ORDER BY orderdate DESC;
Run Code Online (Sandbox Code Playgroud)

在 SQL 2019 CTP 3.2 下运行相同的查询会显示两者的串行计划,除非我将查询更改为WHERE orderid <= 50000,然后我观察到与 SQL Server 2017 相同的行为。因此似乎并行向后扫描尚未实现或需要不同的场景来观察它。