我一直在阅读有关SQL Server内部的信息,每本书或博客都提到了有关向后扫描的内容。
向后扫描聚集索引不能使用并行性
唯一说些什么的是下面的这篇文章。该帖子说,SQL Server团队没有实现向后扫描所需的优化。https://www.itprotoday.com/sql-server/descending-indexes
由于叶级页面是使用双向链接列表链接的,因此我不明白为什么向后扫描与向前扫描不同。任何澄清都非常感激。
我一直在阅读有关SQL Server内部的信息,每本书或博客都提到了有关向后扫描的内容。
向后扫描聚集索引不能使用并行性
唯一说些什么的是下面的这篇文章。该帖子说,SQL Server团队没有实现向后扫描所需的优化。https://www.itprotoday.com/sql-server/descending-indexes
由于叶级页面是使用双向链接列表链接的,因此我不明白为什么向后扫描与向前扫描不同。任何澄清都非常感激。
Answers:
被引用的文章特别指出了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相同的行为。因此似乎并行反向扫描仍未实现或需要观察到不同的情况。