OPTION 子句 (Transact-SQL)
適用於:Microsoft Fabric 中 Microsoft Fabric倉儲中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse AnalyticsAnalytics Platform System (PDW)SQL 分析端點
指定所指出的查詢提示應該用於整個查詢。 雖然可以有多個查詢提示,不過每個查詢提示只能指定一次。 只有一個 OPTION 子句可以利用陳述式加以指定。
這個子句可以在 SELECT、DELETE、UPDATE 和 MERGE 陳述式中指定。
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)
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: