다음을 통해 공유


조인 힌트(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

조인 힌트는 SQL Server에서 쿼리 최적화 프로그램이 두 테이블 간의 조인 전략을 강제 적용하도록 지정합니다. 조인 및 조인 구문에 대한 일반적인 내용은 FROM 절과 JOIN, APPLY, PIVOT을 참조하세요.

주의

일반적으로 SQL Server 쿼리 최적화 프로그램은 쿼리에 대해 최상의 실행 계획을 선택하므로 숙련된 개발자 및 데이터베이스 관리자가 마지막 방법으로만 힌트를 사용하는 것이 좋습니다.

적용 대상

Transact-SQL 구문 표기 규칙

구문

<join_hint> ::=
     { LOOP | HASH | MERGE | REMOTE }

인수

{ LOOP | HASH | MERGE }

쿼리의 조인이 루프, 해시 또는 병합을 사용하도록 지정합니다. HASH두 테이블 간에 특정 조인을 사용LOOP하거나 MERGE JOIN 적용합니다. LOOP 조인 형식과 RIGHT 함께 또는 FULL 조인 형식으로 지정할 수 없습니다. 자세한 내용은 Joins를 참조하세요.

REMOTE

오른쪽 테이블에서 조인 작업을 수행하도록 지정합니다. 왼쪽 테이블이 로컬 테이블이고 오른쪽 테이블이 원격 테이블인 경우에 유용합니다. REMOTE 는 왼쪽 테이블에 오른쪽 테이블보다 적은 행이 있는 경우에만 사용해야 합니다.

오른쪽 테이블이 로컬이면 조인이 로컬로 수행됩니다. 두 테이블이 모두 원격이지만 다른 데이터 원본에서 온 경우 조인이 REMOTE 올바른 테이블의 사이트에서 수행됩니다. 두 테이블이 모두 동일한 데이터 원본의 원격 테이블인 REMOTE 경우 필요하지 않습니다.

REMOTE 조인 조건자에서 비교되는 값 중 하나가 절을 사용하여 COLLATE 다른 데이터 정렬로 캐스팅되는 경우 사용할 수 없습니다.

REMOTE 는 작업에만 INNER JOIN 사용할 수 있습니다.

설명

조인 힌트는 쿼리 절에 FROM 지정됩니다. 조인 힌트는 두 테이블 간에 조인 전략을 강제 적용합니다. 두 테이블에 조인 힌트를 지정하면 쿼리 최적화 프로그램은 키워드의 ON 위치에 따라 쿼리에 조인된 모든 테이블에 조인 순서를 자동으로 적용합니다. 절 없이 a를 CROSS JOIN ON 사용하면 괄호를 사용하여 조인 순서를 나타낼 수 있습니다.

예제

이 문서의 Transact-SQL 코드 샘플은 AdventureWorks2022 또는 AdventureWorksDW2022 샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.

A. HASH 사용

다음 예에서는 쿼리의 JOIN 연산이 HASH 조인에 의해 수행되도록 지정합니다.

SELECT p.Name,
    pr.ProductReviewID
FROM Production.Product AS p
LEFT OUTER HASH JOIN Production.ProductReview AS pr
    ON p.ProductID = pr.ProductID
ORDER BY ProductReviewID DESC;

B. LOOP 사용

다음 예에서는 쿼리의 JOIN 연산이 LOOP 조인에 의해 수행되도록 지정합니다.

DELETE
FROM Sales.SalesPersonQuotaHistory
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER LOOP JOIN Sales.SalesPerson AS sp
    ON spqh.SalesPersonID = sp.SalesPersonID
WHERE sp.SalesYTD > 2500000.00;
GO

C. MERGE 사용

다음 예에서는 쿼리의 JOIN 연산이 MERGE 조인에 의해 수행되도록 지정합니다.

SELECT poh.PurchaseOrderID,
    poh.OrderDate,
    pod.ProductID,
    pod.DueDate,
    poh.VendorID
FROM Purchasing.PurchaseOrderHeader AS poh
INNER MERGE JOIN Purchasing.PurchaseOrderDetail AS pod
    ON poh.PurchaseOrderID = pod.PurchaseOrderID;
GO