조인 힌트(Transact-SQL)
적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric의 SQL 분석 엔드포인트
Microsoft Fabric의 Warehouse
Microsoft Fabric의 SQL 데이터베이스
조인 힌트는 SQL Server에서 쿼리 최적화 프로그램이 두 테이블 간의 조인 전략을 강제 적용하도록 지정합니다. 조인 및 조인 구문에 대한 일반적인 내용은 FROM 절과 JOIN, APPLY, PIVOT을 참조하세요.
주의
일반적으로 SQL Server 쿼리 최적화 프로그램은 쿼리에 대해 최상의 실행 계획을 선택하므로 숙련된 개발자 및 데이터베이스 관리자가 마지막 방법으로만 힌트를 사용하는 것이 좋습니다.
적용 대상
구문
<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 JOIN
ON
사용하면 괄호를 사용하여 조인 순서를 나타낼 수 있습니다.
예제
이 문서의 코드 샘플은 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
힌트는 ProductKey
DimProduct
배포 열이고 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