it-swarm.com.de

Warum kann in SQL Server ein Rückwärtsscan des Clustered-Index keine Parallelität verwenden?

Ich habe über SQL Server-Interna gelesen und in jedem Buch oder Blog wird dies über Rückwärtsscans erwähnt.

Ein Rückwärtsscan eines Clustered-Index kann keine Parallelität verwenden

Der einzige Beitrag, der etwas sagte, ist dieser unten. Der Beitrag besagt, dass das SQL Server-Team die erforderlichen Optimierungen für einen Rückwärtsscan nicht implementiert hat. https://www.itprotoday.com/sql-server/descending-indexes

Da die Seiten auf Blattebene mithilfe einer doppelt verknüpften Liste verknüpft sind, verstehe ich nicht, warum sich ein Rückwärtsscan von einem Vorwärtsscan unterscheidet. Jede Klarstellung wird sehr geschätzt.

21
Kishan Dasari

Der Artikel, auf den verwiesen wird, gibt ausdrücklich an, dass der Grund dafür, dass rückwärts geordnete Scans in SQL Server 2008 (ab CU6) nicht parallelisiert wurden, nicht technisch ist, sondern dass die Funktion nicht von Kunden angefordert wurde und das Entwicklerteam sich nicht die Mühe gemacht hat, sie zu implementieren.

Beachten Sie, dass der Artikel vor fast 10 Jahren im Kontext der jetzt nicht unterstützten SQL Server 2008-Version geschrieben wurde. Die Speicher-Engine und der Optimierer wurden erheblich geändert. Trotzdem sehe ich immer noch einen parallelen Plan für die Abfrage ASC und einen seriellen Plan für die Version DESC aus der Demo-Abfrage des Artikels unter SQL Server 2017:

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

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

Das Ausführen derselben Abfragen unter SQL 2019 CTP 3.2 zeigt einen seriellen Plan für beide an, es sei denn, ich habe die Abfrage in WHERE orderid <= 50000 Geändert, wobei ich dann dasselbe Verhalten wie bei SQL Server 2017 beobachtet habe. Es scheint also, dass entweder der parallele Rückwärtsscan funktioniert hat noch nicht implementiert oder ein anderes Szenario ist erforderlich, um es zu beobachten.

19
Dan Guzman