SQL Server에서 클러스터형 인덱스의 역방향 스캔이 병렬 처리를 사용할 수없는 이유는 무엇입니까?


21

SQL Server 내부에 대해 읽었으며 모든 책이나 블로그에서 역방향 검색에 대해 언급했습니다.

클러스터형 인덱스의 역방향 스캔은 병렬 처리를 사용할 수 없습니다

무언가를 말한 유일한 게시물은 아래에 있습니다. 이 포스트는 SQL Server 팀이 역방향 스캔에 필요한 최적화를 구현하지 않았다고 말합니다. https://www.itprotoday.com/sql-server/descending-indexes

리프 수준 페이지는 이중 연결 목록을 사용하여 연결되므로 역방향 검색이 정방향 검색과 다른 이유를 이해할 수 없습니다. 모든 설명은 정말 감사합니다.

답변:


19

참조 된 기사는 SQL6 (현재 CU6 기준)에서 역 주문 스캔이 병렬화되지 않은 이유는 기술적이지 않지만 고객이이 기능을 요청하지 않았으며 개발자 팀이이를 구현하지 않았기 때문에 구체적으로 설명합니다.

이 기사는 지원되지 않는 SQL Server 2008 버전과 관련하여 거의 10 년 전에 작성되었습니다. 스토리지 엔진 및 옵티마이 저가 크게 변경되었습니다. 즉, SQL Server 2017의 기사 데모 쿼리에서 쿼리에 대한 병렬 계획 ASCDESC버전에 대한 직렬 계획을 계속 볼 수 있습니다 .

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 <= 50000SQL Server 2017과 동일한 동작을 관찰 하지 않는 한 두 가지에 대한 직렬 계획이 표시 됩니다. 따라서 병렬 역방향 스캔이 아직 구현되지 않았거나 이를 관찰하려면 다른 시나리오가 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.