수색…


JOIN Hints

두 테이블을 조인 할 때 SQL Server 쿼리 최적화 프로그램 (QO)은 쿼리에 사용될 여러 조인 유형을 선택할 수 있습니다.

  • 해시 조인
  • LOOP 조인
  • 병합 참여

QO는 계획을 탐색하고 테이블 조인에 가장 적합한 연산자를 선택합니다. 그러나 최적 결합 연산자가 무엇인지 확실하면 사용할 JOIN의 유형을 지정할 수 있습니다. Inner LOOP 조인은 QO가 두 개의 테이블을 조인하는 동안 중첩 루프 조인을 선택하게합니다.

select top 100 *
from Sales.Orders o 
    inner loop join Sales.OrderLines ol 
    on o.OrderID = ol.OrderID

내부 병합 조인은 MERGE 조인 연산자를 강제합니다.

select top 100 *
from Sales.Orders o 
    inner merge join Sales.OrderLines ol 
    on o.OrderID = ol.OrderID

내부 해쉬 조인은 HASH 조인 연산자를 강요합니다 :

select top 100 *
from Sales.Orders o 
    inner hash join Sales.OrderLines ol 
    on o.OrderID = ol.OrderID

힌트 그룹

GROUP BY 절을 사용하면 SQL Server 쿼리 최적화 프로그램 (QO)에서 여러 유형의 그룹화 연산자를 선택할 수 있습니다.

  • HASH 항목을 그룹화하기위한 해시 맵을 만드는 집계
  • 선주문 된 입력과 잘 작동하는 스트림 집계

최적이 될 것이라는 것을 알고있는 경우 QO가 하나 또는 다른 집계 연산자를 선택하도록 명시 적으로 요구할 수 있습니다. OPTION (ORDER GROUP)을 사용하면 QO는 항상 Stream aggregate를 선택하고 입력이 정렬되지 않으면 Stream aggregate 앞에 정렬 연산자를 추가합니다.

select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (ORDER GROUP) 

OPTION (해시 그룹)을 사용하면 QO는 항상 해시 집계를 선택합니다.

select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (HASH GROUP) 

빠른 행 힌트

쿼리가 첫 번째 number_rows를 빠르게 검색하도록 최적화되도록 지정합니다. 이것은 음이 아닌 정수입니다. 첫 번째 number_rows가 반환 된 후 쿼리는 계속 실행되고 전체 결과 집합을 생성합니다.

select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (FAST 20) 

UNION 힌트

UNION 연산자를 두 개의 쿼리 결과에 사용하면 쿼리 최적화 프로그램 (QO)에서 다음 연산자를 사용하여 두 개의 결과 집합으로 된 유니온을 만들 수 있습니다.

  • 병합 (연합)
  • 콩 카트 (연합)
  • 해시 매치 (유니온)

OPTION () 힌트를 사용하여 사용할 연산자를 명시 적으로 지정할 수 있습니다.

select OrderID, OrderDate, ExpectedDeliveryDate, Comments
from Sales.Orders
where OrderDate > DATEADD(day, -1, getdate())
UNION
select PurchaseOrderID as OrderID, OrderDate, ExpectedDeliveryDate, Comments
from Purchasing.PurchaseOrders
where OrderDate > DATEADD(day, -1, getdate())
OPTION(HASH UNION)
-- or OPTION(CONCAT UNION)
-- or OPTION(MERGE UNION)

MAXDOP 옵션

이 옵션을 지정하는 쿼리에 대한 최대 병렬 처리 수준을 지정합니다.

SELECT OrderID,
    AVG(Quantity)
FROM Sales.OrderLines
GROUP BY OrderID
OPTION (MAXDOP 2);

이 옵션은 sp_configure 및 Resource Governor의 MAXDOP 구성 옵션보다 우선합니다. MAXDOP가 0으로 설정되면 서버는 최대 병렬 처리 수준을 선택합니다.

색인 힌트

인덱스 힌트는 SQL Server의 쿼리 최적화 프로그램이 최상의 인덱스로 간주되는 것을 선택하는 대신 특정 인덱스를 사용하도록 쿼리를 강제하는 데 사용됩니다. 경우에 따라 쿼리에서 사용해야하는 인덱스를 지정하여 이점을 얻을 수 있습니다. 일반적으로 SQL Server의 쿼리 최적화 프로그램은 쿼리에 적합한 최상의 인덱스를 선택하지만 누락되거나 오래된 통계 나 특정 요구 때문에 강제로 실행할 수 있습니다.

SELECT *
FROM mytable WITH (INDEX (ix_date))
WHERE field1 > 0
    AND CreationDate > '20170101'


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow