En SQL Server, ¿por qué una exploración hacia atrás del índice agrupado no puede no usar paralelismo?

21

He estado leyendo sobre aspectos internos de SQL Server y cada libro o blog menciona esto sobre escaneos hacia atrás.

Una exploración hacia atrás de un índice agrupado no puede usar paralelismo

La única publicación que dijo algo es esta a continuación. La publicación dice que el equipo de SQL Server no implementó las optimizaciones necesarias para una exploración hacia atrás. https://www.itprotoday.com/sql-server/descending-indexes

Dado que las páginas a nivel de hoja están vinculadas usando una lista doblemente vinculada, no entiendo por qué una exploración hacia atrás es diferente a una exploración hacia adelante. Cualquier aclaración es realmente apreciada.

Kishan Dasari
fuente

Respuestas:

19

El artículo al que se hace referencia específicamente establece que la razón por la cual los análisis ordenados hacia atrás no estaban paralelos en SQL Server 2008 (a partir de CU6) no es técnica, sino porque los clientes no habían solicitado la función y el equipo de desarrollo no se molestó en implementarla.

Tenga en cuenta que el artículo fue escrito hace casi 10 años en el contexto de la versión de SQL Server 2008 ahora no compatible. Se han producido cambios significativos en el motor de almacenamiento y el optimizador. Dicho esto, todavía veo un plan paralelo para la ASCconsulta y un plan en serie para la DESCversión de la consulta de demostración del artículo en 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;

La ejecución de esas mismas consultas en SQL 2019 CTP 3.2 muestra un plan en serie para ambos, a menos que cambie la consulta a WHERE orderid <= 50000, donde luego observé el mismo comportamiento que SQL Server 2017. Por lo tanto, parece que el escaneo paralelo hacia atrás todavía no se ha implementado o Se necesita un escenario diferente para observarlo.

Dan Guzman
fuente