OPTION 절(Transact-SQL)
적용 대상: Microsoft Fabric의 Microsoft Fabric
SQL 데이터베이스
에 있는 Microsoft Fabric
Warehouse의 SQL Server
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System(PDW)
SQL 분석 엔드포인트
지정한 쿼리 힌트가 전체 쿼리에서 사용되도록 지정합니다. 여러 개의 쿼리 힌트가 허용되지만 각 쿼리 힌트는 한 번만 지정할 수 있습니다. 문에서 하나의 OPTION
절만 지정할 수 있습니다.
이 절은 SELECT
, DELETE
, UPDATE
, MERGE
문에서 지정할 수 있습니다.
구문
SQL Server, Azure SQL Managed Instance 및 Azure SQL Database에 대한 구문:
[ OPTION ( <query_hint> [ , ...n ] ) ]
Microsoft Fabric의 Warehouse 구문:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name |
<query_hint>
<query_hint> ::=
HASH JOIN
| LOOP JOIN
| MERGE JOIN
| FORCE ORDER
| { FORCE | DISABLE } EXTERNALPUSHDOWN
| FOR TIMESTAMP AS OF '<point_in_time>'
Microsoft Fabric의 Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW) 및 SQL 분석 엔드포인트에 대한 구문:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name |
<query_hint>
<query_hint> ::=
HASH JOIN
| LOOP JOIN
| MERGE JOIN
| FORCE ORDER
| { FORCE | DISABLE } EXTERNALPUSHDOWN
Azure Synapse Analytics의 서버리스 SQL 풀 구문:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name
인수
query_hint
데이터베이스 엔진에서 최적화 프로그램 힌트를 사용하여 문을 처리하는 방법을 사용자 지정한다는 것을 나타내는 키워드입니다. 자세한 내용은 쿼리 힌트를 참조하세요.
예제
이 문서의 Transact-SQL 코드 샘플은 AdventureWorks2022
또는 AdventureWorksDW2022
샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.
A. GROUP BY 절과 함께 OPTION 절 사용
다음 예에서는 OPTION
절과 함께 GROUP BY
절을 사용하는 방법을 보여 줍니다.
USE AdventureWorks2022;
GO
SELECT ProductID,
OrderQty,
SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
OPTION (HASH GROUP, FAST 10);
GO
예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)
B. OPTION 절에서 레이블을 사용하는 SELECT 문
다음 예제에서는 절에 레이블 OPTION
이 있는 Azure Synapse Analytics SELECT
문을 보여 줍니다.
SELECT * FROM FactResellerSales
OPTION (LABEL = 'q17');
C. OPTION 절에서 쿼리 힌트를 사용하는 SELECT 문
다음 예제에서는 절에 SELECT
쿼리 힌트를 HASH JOIN
사용하는 문을 보여 있습니다 OPTION
.
-- Uses AdventureWorks
SELECT COUNT(*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
OPTION (HASH JOIN);
D. OPTION 절에서 레이블 및 여러 쿼리 힌트를 사용하는 SELECT 문
다음 예제는 레이블 및 여러 쿼리 힌트를 포함하는 Azure Synapse Analytics SELECT
문입니다. 컴퓨팅 노드에서 쿼리를 실행하면 SQL Server에서 가장 최적이라고 결정하는 전략에 따라 SQL Server는 해시 조인 또는 병합 조인을 적용합니다.
SELECT COUNT(*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
OPTION (Label = 'CustJoin', HASH JOIN, MERGE JOIN);
E. 뷰를 쿼리할 때 쿼리 힌트 사용
다음 예제에서는 CustomerView라는 뷰를 HASH JOIN
만든 다음 뷰와 테이블을 참조하는 쿼리에서 쿼리 힌트를 사용합니다.
CREATE VIEW CustomerView
AS
SELECT CustomerKey,
FirstName,
LastName
FROM ssawPDW..DimCustomer;
GO
SELECT COUNT(*)
FROM dbo.CustomerView a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
OPTION (HASH JOIN);
GO
DROP VIEW CustomerView;
GO
F. 하위 select 및 쿼리 힌트가 있는 쿼리
다음 예제에서는 하위 select 및 쿼리 힌트 모두를 포함하는 쿼리를 보여 줍니다. 쿼리 힌트는 전역적으로 적용됩니다. 쿼리 힌트는 하위 선택 문에 추가할 수 없습니다.
CREATE VIEW CustomerView
AS
SELECT CustomerKey,
FirstName,
LastName
FROM ssawPDW..DimCustomer;
GO
SELECT *
FROM (
SELECT COUNT(*) AS a
FROM dbo.CustomerView a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
) AS t
OPTION (HASH JOIN);
G. 쿼리의 순서와 일치하도록 조인 순서 강제 적용
다음 예제에서는 힌트를 FORCE ORDER
사용하여 쿼리 계획에서 쿼리에 지정된 조인 순서를 사용하도록 강제합니다. 이 힌트는 일부 쿼리의 성능을 향상시키지만 일부 쿼리의 성능은 향상되지 않습니다.
이 쿼리는 데이터베이스 테이블의 파티션에 대한 파티션 ProspectiveBuyer
번호, 경계 값, 경계 값 형식 및 경계당 행을 ssawPDW
가져옵니다.
SELECT sp.partition_number,
prv.value AS boundary_value,
lower(sty.name) AS boundary_value_type,
sp.rows
FROM sys.tables st
INNER JOIN sys.indexes si
ON st.object_id = si.object_id AND si.index_id < 2
INNER JOIN sys.partitions sp
ON sp.object_id = st.object_id AND sp.index_id = si.index_id
INNER JOIN sys.partition_schemes ps
ON ps.data_space_id = si.data_space_id
INNER JOIN sys.partition_range_values prv
ON prv.function_id = ps.function_id
INNER JOIN sys.partition_parameters pp
ON pp.function_id = ps.function_id
INNER JOIN sys.types sty
ON sty.user_type_id = pp.user_type_id AND prv.boundary_id = sp.partition_number
WHERE st.object_id = (
SELECT object_id
FROM sys.objects
WHERE name = 'FactResellerSales'
)
ORDER BY sp.partition_number
OPTION (FORCE ORDER);
H. EXTERNALPUSHDOWN 사용
다음 예제에서는 절의 WHERE
푸시다운을 외부 Hadoop 테이블의 MapReduce 작업으로 강제 적용합니다.
SELECT ID FROM External_Table_AS A
WHERE ID < 1000000
OPTION (FORCE EXTERNALPUSHDOWN);
다음 예제에서는 외부 Hadoop 테이블의 MapReduce 작업에 대한 절의 WHERE
푸시다운을 방지합니다. 모든 행은 절이 적용되는 PDW로 WHERE
반환됩니다.
SELECT ID FROM External_Table_AS A
WHERE ID < 10
OPTION (DISABLE EXTERNALPUSHDOWN);
9\. 특정 시점의 데이터 쿼리
적용 대상: Microsoft Fabric 내 Warehouse
자세한 내용은 FOR TIMESTAMP 쿼리 힌트를 참조하세요.
Microsoft Fabric의 Synapse Data Warehouse에서 과거에 존재했던 데이터를 쿼리하려면 OPTION
절에서 TIMESTAMP
구문을 사용합니다. 다음 샘플 쿼리는 2024년 3월 13일 오후 7:39:35.28(UTC)에 표시된 데이터를 반환합니다. 표준 시간대는 항상 UTC입니다.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey
OPTION (FOR TIMESTAMP AS OF '2024-03-13T19:39:35.28');--March 13, 2024 at 7:39:35.28 PM UTC