Clausola OPTION (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehouse in Microsoft Fabric

Specifica che l'hint per la query indicato deve essere utilizzato in tutta la query. Sono consentiti più hint per la query. Ogni hint, tuttavia, può essere specificato una sola volta. In una istruzione è consentito utilizzare una sola clausola OPTION.

La clausola può essere specificata nelle istruzioni SELECT, DELETE, UPDATE e MERGE.

Convenzioni di sintassi Transact-SQL

Sintassi

Sintassi per SQL Server e per il database SQL di Azure

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

Sintassi per Azure Synapse Analytics e piattaforma di strumenti analitici (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  

Sintassi per il pool SQL serverless in Azure Synapse Analytics

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

<query_option> ::=
    LABEL = label_name

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

query_hint
Parole chiave che indicano quali hint di ottimizzazione vengono utilizzati per personalizzare la modalità di elaborazione dell'istruzione nel motore di database. Per altre informazioni, vedere Hint per la query (Transact-SQL).

Esempi

R. Uso di una clausola OPTION con una clausola GROUP BY

Nell'esempio seguente viene illustrato l'utilizzo della clausola OPTION con una clausola 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  

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

B. Istruzione SELECT con un'etichetta nella clausola OPTION

L'esempio seguente illustra un'istruzione azure Synapse Analytics edizione Standard LECT con un'etichetta nella clausola OPTION.

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

C. Istruzione SELECT con un hint per la query nella clausola OPTION

Nell'esempio seguente viene illustrata un'istruzione SELECT che usa un hint per la query HASH JOIN nella clausola OPTION.

-- Uses AdventureWorks  
  
SELECT COUNT (*) FROM dbo.DimCustomer a  
INNER JOIN dbo.FactInternetSales b   
ON (a.CustomerKey = b.CustomerKey)  
OPTION (HASH JOIN);  

D. Istruzione SELECT con un'etichetta e più hint per la query nella clausola OPTION

L'esempio seguente è un'istruzione edizione Standard LECT di Azure Synapse Analytics che contiene un'etichetta e più hint per la query. Quando viene eseguita la query sui nodi di calcolo, SQL Server applicherà un hash join o un merge join, in base alla strategia che SQL Server determina come ottimale.

-- 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. Tramite un hint per la query quando si eseguono query di una vista

Nell'esempio seguente viene creata una CustomerView denominata e quindi viene usato un hint per la query HASH JOIN in una query che fa riferimento a una vista e una tabella.

-- 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. Query con un'istruzione sub-SELECT e un hint per la query

Nell'esempio seguente viene illustrata una query che contiene un'istruzione sub-SELECT e un hint per la query. L'hint per la query viene applicato a livello globale. Non è consentito aggiungere hint per la query all'istruzione sub-SELECT.

-- 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. Forzare l'ordine di join in modo che corrisponda a quello della query

Nell'esempio seguente viene usato l'hint FORCE ORDER per forzare il piano di query in modo che venga usato l'ordine di join specificato dalla query. Ciò migliorerà le prestazioni in alcune query ma non in tutte.

-- 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. Tramite EXTERNALPUSHDOWN

Nell'esempio seguente viene forzata la distribuzione della clausola WHERE per il processo MapReduce nella tabella esterna Hadoop.

SELECT ID FROM External_Table_AS A   
WHERE ID < 1000000  
OPTION (FORCE EXTERNALPUSHDOWN);  

Nell'esempio seguente viene evitata la distribuzione della clausola WHERE per il processo MapReduce nella tabella esterna Hadoop. Dove viene applicata la clausola WHERE, tutte le righe vengono restituite a PDW.

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

Vedi anche

Hint (Transact-SQL)
SELECT (Transact-SQL)
UPDATE (Transact-SQL)
MERGE (Transact-SQL)
DELETE (Transact-SQL)