고급 쿼리 튜닝 개념

Microsoft SQL Server는 메모리 내 정렬 및 해시 조인 기술을 사용하여 정렬, 교집합, 합집합 및 차집합 연산을 수행합니다. SQL Server는 이러한 유형의 쿼리 계획을 사용하여 종형 저장이라고 하는 수직 테이블 분할을 지원합니다.

SQL Server에서 사용되는 세 가지 유형의 조인 연산은 다음과 같습니다.

  • 중첩 루프 조인

  • 병합 조인

  • 해시 조인

한 조인 입력은 작고(행이 10개 미만) 다른 조인 입력은 아주 크며 조인 열에 인덱스가 지정된 경우에는 I/O와 비교 작업이 가장 적은 인덱스 중첩 루프 조인이 가장 빠른 조인 연산입니다. 중첩 루프에 대한 자세한 내용은 중첩 루프 조인 이해를 참조하십시오.

두 조인 입력이 작지는 않지만 해당 조인 열을 기준으로 정렬되는 경우(예: 정렬된 인덱스 검색으로 가져온 경우)에는 병합 조인이 가장 빠른 조인 연산입니다. 두 조인 입력이 모두 크고 비슷한 크기인 경우에는 사전 정렬이 포함된 병합 조인과 해시 조인이 비슷한 성능을 제공합니다. 그러나 두 입력의 크기가 서로 많이 다를 때는 해시 조인 연산이 더 빠른 경우가 많습니다. 자세한 내용은 병합 조인 이해를 참조하십시오.

해시 조인은 크고 정렬되지 않았으며 인덱싱되지 않은 입력을 효율적으로 처리할 수 있습니다. 해시 조인이 복잡한 쿼리의 중간 결과에 유용한 이유는 다음과 같습니다.

  • 디스크에 명시적으로 저장한 다음 인덱싱하지 않는 한 중간 결과는 인덱싱되지 않으며 쿼리 계획의 다음 작업을 위해 적절히 정렬되지 않는 경우가 많습니다.

  • 쿼리 최적화 프로그램은 중간 결과 크기만을 예상합니다. 복잡한 쿼리에서는 예상이 크게 잘못될 수 있으므로 중간 결과를 처리하기 위한 알고리즘은 효율적이어야 할 뿐 아니라 중간 결과가 예상보다 훨씬 큰 것으로 확인되는 경우 적절히 하향 조정되어야 합니다.

해시 조인을 사용하면 비정규화 사용을 줄일 수 있습니다. 비정규화는 대체로 중복(예: 일관성 없는 업데이트)의 위험에도 불구하고 조인 연산을 줄여 보다 나은 성능을 얻기 위해 사용됩니다. 해시 조인은 비정규화의 필요성을 줄여 줍니다. 해시 조인을 사용하면 별개의 파일 또는 인덱스에 있는 단일 테이블의 열 그룹을 나타내는 수직 분할이 물리적 데이터베이스 디자인에 유용한 옵션이 될 수 있습니다. 자세한 내용은 해시 조인 이해를 참조하십시오.