SQL Server 내부에 대해 읽었으며 모든 책이나 블로그에서 역방향 검색에 대해 언급했습니다.
클러스터형 인덱스의 역방향 스캔은 병렬 처리를 사용할 수 없습니다
무언가를 말한 유일한 게시물은 아래에 있습니다. 이 포스트는 SQL Server 팀이 역방향 스캔에 필요한 최적화를 구현하지 않았다고 말합니다. https://www.itprotoday.com/sql-server/descending-indexes
리프 수준 페이지는 이중 연결 목록을 사용하여 연결되므로 역방향 검색이 정방향 검색과 다른 이유를 이해할 수 없습니다. 모든 설명은 정말 감사합니다.
답변
참조 된 기사는 SQL6 (현재 CU6 기준)에서 역 주문 스캔이 병렬화되지 않은 이유는 기술적이지 않지만 고객이이 기능을 요청하지 않았으며 개발자 팀이이를 구현하지 않았기 때문에 구체적으로 설명합니다.
이 기사는 지원되지 않는 SQL Server 2008 버전과 관련하여 거의 10 년 전에 작성되었습니다. 스토리지 엔진 및 옵티마이 저가 크게 변경되었습니다. 즉, 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과 동일한 동작을 관찰 하지 않는 한 두 가지에 대한 직렬 계획이 표시 됩니다. 따라서 병렬 역방향 스캔이 아직 구현되지 않았거나 이를 관찰하려면 다른 시나리오가 필요합니다.