SQL Server 실행 계획 을 강제로 사용 하여 복잡 한 검색 어 에서 의 성능 을 향상 시 킵 니 다.

실행 계획 을 관찰 한 결과 이전의 실행 계획 은 많은 테이블 연결 부분 에서 Hash Join 을 사 용 했 고 관련 된 테이블 에 데이터 가 많 기 때문에 조회 최적화 기 는 병행 실행 을 선택 하여 속도 가 비교적 빠르다.한편,우리 가 최 적 화 된 실행 계획 은 색인 이 존재 하고 표 안의 데이터 가 매우 크기 때문에 여과 조건 의 값 은 매우 넓 은 통계 정보의 보폭 범위 내 에서 평가 행 수 에 비교적 큰 편차 가 생 겼 다(여과 조건 은 실제 15000 줄 이 고 보폭 내 에서 평가 하 는 평균 행 수 는 800 줄 정도).그래서 조회 최적화 기 는 Loop Join 을 선 택 했 고 병행 집행 을 선택 하지 않 았 다.따라서 집행 시간 은 반등 하지 않 는 다.
문 구 는 저장 과정 에서 이 루어 지기 때문에 우 리 는 이 문 구 를 undocument 조회 힌트 를 직접 사용 하여 이 조회 의 병행 비용 한도 값 을 0 으로 강제 적 으로 낮 추고 이 문 구 를 강제 적 으로 병행 하 게 합 니 다.문장의 실행 시간 은 20 초 에서 5 초 로 낮 춥 니 다(주:Hash Join 힌트 를 사용 하 는 것 은 7 초 입 니 다).
다음은 이 힌트 를 사용 하 는 효 과 를 간단 한 예 로 보 여 줍 니 다.예 를 들 어 T-SQL 은 코드 목록 1 과 같 습 니 다.

SELECT *
FROM [AdventureWorks].[Sales].[SalesOrderDetail] a 
INNER JOIN [Sales].SalesOrderHeader b
ON a.SalesOrderID=b.SalesOrderID
코드 목록 1.
이 문 구 는 기본적으로 병행 하지 않 습 니 다.그림 1 참조:
image
그림 1.
코드 목록 2 와 같은 이 문구 에 힌트 를 드 리 겠 습 니 다.

SELECT *
 FROM [AdventureWorks].[Sales].[SalesOrderDetail] a 
 INNER JOIN [Sales].SalesOrderHeader b
 ON a.SalesOrderID=b.SalesOrderID
 OPTION(querytraceon 8649)
코드 목록 2.
이때 실행 계획 은 제시 에 따라 병행 합 니 다.그림 2 참조:
image
그림 2.
복잡 한 DSS 나 OLAP 조회 에 직면 했 을 때 유사 한 상황 이 발생 하면 이 Undocument 알림 을 사용 하여 SQL Server 에 가능 한 한 병행 을 요구 하여 실행 시간 을 낮 추 는 것 을 고려 할 수 있다.

좋은 웹페이지 즐겨찾기