문제

최근 에이 쿼리를 최적화하려고했습니다

UPDATE Analytics
SET UserID = x.UserID
FROM Analytics z 
INNER JOIN UserDetail x ON x.UserGUID = z.UserGUID

예상 실행 계획은 테이블 업데이트에서 57%, 해시 매치 (집계)에서 40%를 보여줍니다. 나는 약간의 스누핑을했고 합류 힌트 주제를 발견했습니다. 그래서 나는 내부 결합과 Wa-Zham에 루프 힌트를 추가했습니다! 새로운 실행 계획은 테이블 업데이트에서 38%, 색인 검색에서 58%를 보여줍니다.

그래서 나는 신중함이 더 나아질 때까지 모든 질문에 루프 힌트를 적용하기 시작했습니다. 인터넷 검색 후에, 나는 결합 힌트가 잘 다루지 않았다는 것을 깨달았습니다. . 그러므로...

  1. 누군가 내 모든 쿼리에 루프 힌트를 적용하는 것이 나쁜 생각인지 말해 줄 수 있습니까? 루프 조인이 Query Optimiser의 기본 조인 메소드이지만 명령문의 유효성을 확인할 수없는 곳을 읽었습니다.
  2. 가입 힌트는 언제 사용됩니까? Sh*t가 팬을 때리고 유령 버스터가 마을에 없을 때?
  3. 루프, 해시 및 병합 힌트의 차이점은 무엇입니까? 볼은 병합이 가장 느리게 보이지만 각 힌트의 적용은 무엇입니까?

시간과 사람들을 도와 주셔서 감사합니다!

SQL Server 2008 BTW를 실행하고 있습니다. 위에서 언급 한 통계는 추정 된 실행 계획입니다.

도움이 되었습니까?

해결책

누군가 내 모든 쿼리에 루프 힌트를 적용하는 것이 나쁜 생각인지 말해 줄 수 있습니까? 루프 조인이 Query Optimiser의 기본 조인 메소드이지만 명령문의 유효성을 확인할 수없는 곳을 읽었습니다.

이것은 더 효율적 일 수있는 다른 방법을 고려할 수있는 기회의 옵티마이저를 강탈하기 때문입니다.

가입 힌트는 언제 사용됩니까? Sh*t가 팬을 때리고 유령 버스터가 마을에 없을 때?

데이터 분포 (Optimizer가 결정을 내린)가 심하게 왜곡되고 통계가 올바르게 표현할 수 없을 때.

루프, 해시 및 병합 힌트의 차이점은 무엇입니까? 볼은 병합이 가장 느리게 보이지만 각 힌트의 적용은 무엇입니까?

이것들은 다른 알고리즘입니다.

  1. LOOP 중첩 루프 : 외부 테이블의 각 레코드에 대해 내부 테이블이 일치를 검색합니다 (사용 가능한 색인 사용). 두 테이블의 레코드의 작은 부분만이 JOIN 그리고 WHERE 정황.

  2. MERGE 정렬 된 두 테이블은 정렬 순서로 이동하여 타의 추종을 불허하는 레코드를 건너 뜁니다. 가장 빠른 FULL JOINs 및 두 레코드 세트가 이미 정렬 된 경우 (이전 정렬 작업에서 또는 인덱스 액세스 경로가 사용될 때)

  3. HASH 임시 저장소에 해시 테이블을 작성하십시오 (메모리 또는 tempdb)) 중 하나에서 테이블 중 하나에서 각 레코드에 대해 검색합니다. 두 테이블의 레코드의 많은 부분이 일치하는 경우 가장 빠릅니다. WHERE 그리고 JOIN 상태.

다른 팁

예상 실행 계획은 테이블 업데이트에서 57%, 해시 매치 (집계)에서 40%를 보여줍니다. 나는 약간의 스누핑을했고 합류 힌트 주제를 발견했습니다. 그래서 나는 내부 결합과 Wa-Zham에 루프 힌트를 추가했습니다! 새로운 실행 계획은 테이블 업데이트에서 38%, 색인 검색에서 58%를 보여줍니다.

확실히 그것은 당신의 제안 된 계획이 더 나쁘다는 것을 의미합니까? 테이블 업데이트가 일정한 시간이 걸린다고 가정하면 이제 인덱스 활동에 의해 비용이 많이 듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top