No SQL Server, por que uma verificação reversa do índice em cluster não pode usar o paralelismo?

21

Eu tenho lido sobre os internos do SQL Server e todos os livros ou blogs mencionam isso sobre verificações anteriores.

Uma varredura reversa de um índice em cluster não pode usar paralelismo

O único post que disse algo é esse abaixo. A publicação diz que a equipe do SQL Server não implementou as otimizações necessárias para uma verificação reversa. https://www.itprotoday.com/sql-server/descending-indexes

Como as páginas no nível da folha são vinculadas usando uma lista duplamente vinculada, não entendo por que uma varredura reversa é diferente de uma varredura direta. Qualquer esclarecimento é realmente apreciado.

Kishan Dasari
fonte

Respostas:

19

O artigo mencionado especifica especificamente o motivo pelo qual as verificações ordenadas para trás não foram paralelizadas no SQL Server 2008 (a partir do CU6) não é técnico, mas porque o recurso não foi solicitado pelos clientes e a equipe de desenvolvimento não se deu ao trabalho de implementá-lo.

Observe que o artigo foi escrito há quase 10 anos no contexto da versão agora não suportada do SQL Server 2008. Houve alterações significativas no mecanismo de armazenamento e no otimizador. Dito isso, ainda vejo um plano paralelo para a ASCconsulta e um plano serial para a DESCversão da consulta demo do artigo no 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;

A execução dessas mesmas consultas no SQL 2019 CTP 3.2 mostra um plano serial para ambos, a menos que eu tenha alterado a consulta para WHERE orderid <= 50000onde observei o mesmo comportamento do SQL Server 2017. Portanto, parece que a verificação paralela para trás ainda não foi implementada ou é necessário um cenário diferente para observá-lo.

Dan Guzman
fonte