OPTION 子句 (Transact-SQL)

適用於:Microsoft Fabric 中 Microsoft Fabric倉儲中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse AnalyticsAnalytics Platform System (PDW)SQL 分析端點

指定所指出的查詢提示應該用於整個查詢。 雖然可以有多個查詢提示,不過每個查詢提示只能指定一次。 只有一個 OPTION 子句可以利用陳述式加以指定。

這個子句可以在 SELECT、DELETE、UPDATE 和 MERGE 陳述式中指定。

Transact-SQL 語法慣例

Syntax

SQL Server 和 Azure SQL Database 的語法

[ OPTION ( <query_hint> [ ,...n ] ) ]   

Azure Synapse Analytics 和 Analytics Platform System (PDW) 的語法

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

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

query_hint
關鍵字,它們會指出要使用哪一個最佳化工具提示來自訂 Database Engine 處理陳述式的方式。 如需詳細資訊,請參閱 查詢提示 (Transact-SQL)

範例

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 和 Analytics Platform System (PDW)

B. OPTION 子句中含有標籤的 SELECT 陳述式

下列範例示範在 OPTION 子句中使用標籤的 Azure Synapse Analytics SELECT 陳述式。

-- Uses AdventureWorks  
  
SELECT * FROM FactResellerSales  
  OPTION ( LABEL = 'q17' );  

C. OPTION 子句中含有查詢提示的 SELECT 陳述式

下列範例示範一個在 OPTION 子句中使用 HASH JOIN 查詢提示的 SELECT 陳述式。

-- 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 決定的最佳策略,套用雜湊聯結或合併聯結。

-- Uses AdventureWorks  
  
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 查詢提示。

-- Uses the AdventureWorks sample database
  
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. 含有子選擇和查詢提示的查詢

下列範例示範一個同時包含子選擇和查詢提示的查詢。 查詢提示會在全域套用。 不允許將查詢提示附加至子選擇陳述式。

-- Uses the AdventureWorks sample database
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 提示,以強制查詢計劃使用查詢所指定的聯結順序。 這可改善某些查詢的效能;但並非所有查詢。

-- Uses AdventureWorks  
  
-- Obtain partition numbers, boundary values, boundary value types, and rows per boundary  
-- for the partitions in the ProspectiveBuyer table of the ssawPDW database.  
SELECT sp.partition_number, prv.value AS boundary_value, lower(sty.name) AS boundary_value_type, sp.rows   
FROM sys.tables st JOIN sys.indexes si ON st.object_id = si.object_id AND si.index_id <2  
JOIN sys.partitions sp ON sp.object_id = st.object_id AND sp.index_id = si.index_id  
JOIN sys.partition_schemes ps ON ps.data_space_id = si.data_space_id   
JOIN sys.partition_range_values prv ON prv.function_id = ps.function_id   
JOIN sys.partition_parameters pp ON pp.function_id = ps.function_id   
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);  

下列範例會防止將 WHERE 子句下推至外部 Hadoop 資料表上的 MapReduce 作業。 所有資料列都會傳回給套用 WHERE 子句的 PDW。

SELECT ID FROM External_Table_AS A   
WHERE ID < 10  
OPTION (DISABLE EXTERNALPUSHDOWN);  

另請參閱

提示 (Transact-SQL)
SELECT (Transact-SQL)
UPDATE (Transact-SQL)
MERGE (Transact-SQL)
DELETE (Transact-SQL)