Warum kann bei einer Rückwärtssuche des Clustered Index in SQL Server keine Parallelität verwendet werden?

21

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 über eine doppelt verknüpfte Liste verknüpft sind, verstehe ich nicht, warum sich ein Rückwärtsscan von einem Vorwärtsscan unterscheidet. Jede Klarstellung wird sehr geschätzt.

Kishan Dasari
quelle

Antworten:

19

In dem Artikel, auf den verwiesen wird, wird ausdrücklich angegeben, dass in SQL Server 2008 (ab CU6) rückwärts geordnete Scans nicht parallelisiert wurden. Dies ist jedoch nicht technisch bedingt, da das Feature nicht von Kunden angefordert wurde und das Entwicklerteam sich nicht darum bemüht hat, es 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 das Optimierungsprogramm wurden erheblich geändert. Trotzdem sehe ich immer noch einen parallelen Plan für die ASCAbfrage und einen seriellen Plan für die DESCVersion aus der Demo-Abfrage des Artikels in 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;

Wenn Sie dieselben Abfragen unter SQL 2019 CTP 3.2 ausführen, wird für beide ein serieller Plan angezeigt, es sei denn, ich habe die Abfrage in geändert WHERE orderid <= 50000. Dabei habe ich dasselbe Verhalten wie bei SQL Server 2017 beobachtet. Es scheint also, dass entweder der parallele Rückwärtsscan noch nicht implementiert wurde oder Um dies zu beobachten, ist ein anderes Szenario erforderlich.

Dan Guzman
quelle