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


21

我一直在阅读有关SQL Server内部的信息,每本书或博客都提到了有关向后扫描的内容。

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

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

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

Answers:


19

被引用的文章特别指出了SQL Server 2008(从CU6开始)中未并行执行向后排序扫描的原因不是技术问题,而是因为客户未要求使用该功能,并且开发团队也没有去实施它。

请注意,本文是在将近10年前在当前不受支持的SQL Server 2008版本的上下文中撰写的。存储引擎和优化器已发生重大变化。也就是说,我仍然在SQL Server 2017上的文章演示查询中看到ASC查询的并行计划和DESC版本的串行计划:

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.