SQL Server 2008 가입 힌트
-
20-09-2019 - |
문제
최근 에이 쿼리를 최적화하려고했습니다
UPDATE Analytics
SET UserID = x.UserID
FROM Analytics z
INNER JOIN UserDetail x ON x.UserGUID = z.UserGUID
예상 실행 계획은 테이블 업데이트에서 57%, 해시 매치 (집계)에서 40%를 보여줍니다. 나는 약간의 스누핑을했고 합류 힌트 주제를 발견했습니다. 그래서 나는 내부 결합과 Wa-Zham에 루프 힌트를 추가했습니다! 새로운 실행 계획은 테이블 업데이트에서 38%, 색인 검색에서 58%를 보여줍니다.
그래서 나는 신중함이 더 나아질 때까지 모든 질문에 루프 힌트를 적용하기 시작했습니다. 인터넷 검색 후에, 나는 결합 힌트가 잘 다루지 않았다는 것을 깨달았습니다. 볼. 그러므로...
- 누군가 내 모든 쿼리에 루프 힌트를 적용하는 것이 나쁜 생각인지 말해 줄 수 있습니까? 루프 조인이 Query Optimiser의 기본 조인 메소드이지만 명령문의 유효성을 확인할 수없는 곳을 읽었습니다.
- 가입 힌트는 언제 사용됩니까? Sh*t가 팬을 때리고 유령 버스터가 마을에 없을 때?
- 루프, 해시 및 병합 힌트의 차이점은 무엇입니까? 볼은 병합이 가장 느리게 보이지만 각 힌트의 적용은 무엇입니까?
시간과 사람들을 도와 주셔서 감사합니다!
SQL Server 2008 BTW를 실행하고 있습니다. 위에서 언급 한 통계는 추정 된 실행 계획입니다.
해결책
누군가 내 모든 쿼리에 루프 힌트를 적용하는 것이 나쁜 생각인지 말해 줄 수 있습니까? 루프 조인이 Query Optimiser의 기본 조인 메소드이지만 명령문의 유효성을 확인할 수없는 곳을 읽었습니다.
이것은 더 효율적 일 수있는 다른 방법을 고려할 수있는 기회의 옵티마이저를 강탈하기 때문입니다.
가입 힌트는 언제 사용됩니까? Sh*t가 팬을 때리고 유령 버스터가 마을에 없을 때?
데이터 분포 (Optimizer가 결정을 내린)가 심하게 왜곡되고 통계가 올바르게 표현할 수 없을 때.
루프, 해시 및 병합 힌트의 차이점은 무엇입니까? 볼은 병합이 가장 느리게 보이지만 각 힌트의 적용은 무엇입니까?
이것들은 다른 알고리즘입니다.
LOOP
중첩 루프 : 외부 테이블의 각 레코드에 대해 내부 테이블이 일치를 검색합니다 (사용 가능한 색인 사용). 두 테이블의 레코드의 작은 부분만이JOIN
그리고WHERE
정황.MERGE
정렬 된 두 테이블은 정렬 순서로 이동하여 타의 추종을 불허하는 레코드를 건너 뜁니다. 가장 빠른FULL JOIN
s 및 두 레코드 세트가 이미 정렬 된 경우 (이전 정렬 작업에서 또는 인덱스 액세스 경로가 사용될 때)HASH
임시 저장소에 해시 테이블을 작성하십시오 (메모리 또는tempdb
)) 중 하나에서 테이블 중 하나에서 각 레코드에 대해 검색합니다. 두 테이블의 레코드의 많은 부분이 일치하는 경우 가장 빠릅니다.WHERE
그리고JOIN
상태.
다른 팁
예상 실행 계획은 테이블 업데이트에서 57%, 해시 매치 (집계)에서 40%를 보여줍니다. 나는 약간의 스누핑을했고 합류 힌트 주제를 발견했습니다. 그래서 나는 내부 결합과 Wa-Zham에 루프 힌트를 추가했습니다! 새로운 실행 계획은 테이블 업데이트에서 38%, 색인 검색에서 58%를 보여줍니다.
확실히 그것은 당신의 제안 된 계획이 더 나쁘다는 것을 의미합니까? 테이블 업데이트가 일정한 시간이 걸린다고 가정하면 이제 인덱스 활동에 의해 비용이 많이 듭니다.