다음을 통해 공유


조인 힌트(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 WarehouseMicrosoft Fabric의 SQL 데이터베이스

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

주의

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

적용 대상

Transact-SQL 구문 표기 규칙

구문

<join_hint> ::=
     { LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}

인수

{ LOOP | HASH | MERGE }

적용 대상: Azure SQL Database, Azure SQL Managed Instance, SQL 분석 엔드포인트, Microsoft Fabric의 SQL 데이터베이스, Microsoft Fabric Warehouse

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

REMOTE

적용 대상: Microsoft Fabric에서 Azure SQL Database, Azure SQL Managed Instance, SQL 분석 엔드포인트, SQL 데이터베이스

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

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

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

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

감소시키다

적용 대상: Azure Synapse Analytics 및 Analytics Platform System(PDW)

호환되지 않는 두 개의 배포 테이블을 호환되도록 만들기 위해 조인의 오른쪽에 있는 테이블에 대해 이동할 행 수를 줄입니다. REDUCE 힌트는 세미조인 힌트라고도 합니다.

복제

적용 대상: Azure Synapse Analytics, 분석 플랫폼 시스템(PDW), Microsoft Fabric Warehouse

특정 테이블이 모든 배포 노드에서 복제되는 브로드캐스트 이동 작업을 발생합니다.

  • 브로드캐스트 이동 작업은 INNER 또는 LEFT 조인과 함께 REPLICATE 사용하여 조인의 오른쪽을 모든 노드에 복제합니다.
  • 마찬가지로 RIGHT 조인과 함께 REPLICATE 사용하는 동안 브로드캐스트 이동 작업은 조인의 왼쪽을 모든 노드에 복제합니다.
  • FULL 조인과 함께 REPLICATE 사용하는 경우 예상 계획을 만들 수 없습니다.

재배포 [(columns_count)]

적용 대상: Azure Synapse Analytics 및 Analytics Platform System(PDW)

두 개의 데이터 원본이 JOIN 절에 지정된 열에 배포되도록 합니다. 분산 테이블의 경우 PDW(Analytics Platform System)는 두 테이블의 첫 번째 열에서 순서 섞기 이동을 수행합니다. 복제된 테이블의 경우 PDW(Analytics Platform System)는 트리밍 이동을 수행합니다. 이러한 이동 유형을 이해하려면 PDW(Analytics Platform System) 제품 설명서의 "쿼리 계획 이해" 문서의 "DMS 쿼리 계획 작업" 섹션을 참조하세요. 이 힌트는 쿼리 계획에서 브로드캐스트 이동을 사용하여 호환되지 않는 배포 조인을 해결할 때 성능을 향상시킬 수 있습니다.

적용 대상: Microsoft Fabric Warehouse

REDISTRIBUTE 힌트는 두 개의 데이터 원본이 JOIN 절 열을 기반으로 분산되도록 합니다. 두 테이블의 첫 번째 n 열로 지정된 여러 조인 조건을 처리합니다. 여기서 ncolumn_count 인수입니다. 데이터를 재배포하면 중간 실행 단계 동안 노드 간에 데이터를 균등하게 분산하여 쿼리 성능을 최적화합니다.

(columns_count) 인수는 Microsoft Fabric Warehouse에서만 지원됩니다.

설명

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

예제

이 문서의 코드 샘플은 AdventureWorks2022 또는 AdventureWorksDW2022 샘플 데이터베이스를 사용합니다. 이 데이터베이스는 Microsoft SQL Server 샘플 및 커뮤니티 프로젝트 홈페이지에서 다운로드할 수 있습니다.

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

D. REDUCE 조인 힌트 예제

다음 예제에서는 REDUCE 조인 힌트를 사용하여 쿼리 내에서 파생 테이블의 처리를 변경합니다. 이 쿼리에서 REDUCE 조인 힌트를 사용하면 fis.ProductKey가 고유하게 투영되고, 복제되고, 만들어진 다음, DimProduct에서 DimProduct의 순서를 섞는 중에 ProductKey에 조인됩니다. 결과 파생 테이블은 fis.ProductKey에 배포됩니다.

-- Uses AdventureWorks
  
SELECT SalesOrderNumber
FROM (
    SELECT fis.SalesOrderNumber,
        dp.ProductKey,
        dp.EnglishProductName
    FROM DimProduct AS dp
    INNER REDUCE JOIN FactInternetSales AS fis
        ON dp.ProductKey = fis.ProductKey
    ) AS dTable
ORDER BY SalesOrderNumber;

E. REPLICATE 조인 힌트 예제

다음 예제에서는 REPLICATE 조인 힌트 대신 REDUCE 조인 힌트가 사용된다는 점을 제외하고는 위의 예제와 동일한 쿼리를 보여 줍니다. REPLICATE 힌트를 사용하면 ProductKey 테이블의 FactInternetSales(조인) 열의 값이 모든 노드에 복제됩니다. DimProduct 테이블은 해당 값의 복제된 버전에 조인됩니다.

-- Uses AdventureWorks

SELECT SalesOrderNumber
FROM (
    SELECT fis.SalesOrderNumber,
        dp.ProductKey,
        dp.EnglishProductName
    FROM DimProduct AS dp
    INNER REPLICATE JOIN FactInternetSales AS fis
        ON dp.ProductKey = fis.ProductKey
    ) AS dTable
ORDER BY SalesOrderNumber;

F. REDISTRIBUTE 힌트를 사용하여 호환되지 않는 배포 조인에 대한 순서 섞기 이동을 보장합니다.

다음 쿼리는 호환되지 않는 배포 조인에 대한 REDISTRIBUTE 쿼리 힌트를 사용합니다. 이렇게 하면 쿼리 최적화 프로그램에서 쿼리 계획에서 순서 섞기 이동을 사용할 수 있습니다. 또한 쿼리 계획이 분산 테이블을 복제된 테이블로 이동하는 브로드캐스트 이동을 사용하지 않도록 보장합니다.

다음 예제에서 REDISTRIBUTE 힌트는 ProductKeyDimProduct배포 열이고 FactInternetSales배포 열이 아니기 때문에 FactInternetSales 테이블에서 순서 섞기 이동을 강제합니다.

-- Uses AdventureWorks
  
SELECT dp.ProductKey,
    fis.SalesOrderNumber,
    fis.TotalProductCost
FROM DimProduct AS dp
INNER REDISTRIBUTE JOIN FactInternetSales AS fis
    ON dp.ProductKey = fis.ProductKey;

G. REDISTRIBUTE 힌트와 함께 열 개수 인수 사용

다음 쿼리는 열 개수 인수와 함께 REDISTRIBUTE 쿼리 힌트를 사용하며, 조인에서 각 테이블의 처음 4개 열에서 순서 섞기가 수행됩니다.

SELECT * FROM DA
INNER REDISTRIBUTE (4) JOIN DB
ON DA.a1 = DB.b1