힌트 (Transact-SQL) - 조인

적용 대상:yesSQL Server(지원되는 모든 버전) YesAzure SQL Database YesAzure SQL Managed Instance

조인 힌트는 SQL Server에서 쿼리 최적화 프로그램이 두 테이블 간의 조인 전략을 강제 적용하도록 지정합니다. 조인 및 조인 구문에 대한 자세한 내용은 FROM(Transact-SQL)을 참조하세요.

주의

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

적용 대상:

DELETE

SELECT

UPDATE

Topic link iconTransact-SQL 구문 규칙

구문

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

참고

SQL Server 2014 이전 버전의 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조하세요.

인수

LOOP | HASH | MERGE

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

REMOTE

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

오른쪽 테이블이 로컬이면 조인이 로컬로 수행됩니다. 두 테이블 모두 원격 테이블이지만 데이터 원본이 다른 경우 REMOTE를 사용하면 오른쪽 테이블에서 조인이 수행됩니다. 두 테이블 모두 원격 테이블이며 데이터 원본이 동일한 경우에는 REMOTE를 사용할 필요가 없습니다.

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

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

설명

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

A. HASH 사용

다음 예에서는 쿼리의 JOIN 연산이 HASH 조인에 의해 수행되도록 지정합니다. 이 예에서는 AdventureWorks2019 데이터베이스를 사용합니다.

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 조인에 의해 수행되도록 지정합니다. 이 예에서는 AdventureWorks2019 데이터베이스를 사용합니다.

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 조인에 의해 수행되도록 지정합니다. 이 예에서는 AdventureWorks2019 데이터베이스를 사용합니다.

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  

참고 항목

힌트(Transact-SQL)