Clausola OPTION (Transact-SQL)OPTION Clause (Transact-SQL)

Si applica a:Applies to: sìSQL ServerSQL Server (tutte le versioni supportate) yesSQL ServerSQL Server (all supported versions) Sìdatabase SQL di AzureAzure SQL DatabaseYesdatabase SQL di AzureAzure SQL Database SìIstanza gestita di SQL di AzureAzure SQL Managed InstanceYesIstanza gestita di SQL di AzureAzure SQL Managed Instance sìAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics sìParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseSi applica a:Applies to: sìSQL ServerSQL Server (tutte le versioni supportate) yesSQL ServerSQL Server (all supported versions) Sìdatabase SQL di AzureAzure SQL DatabaseYesdatabase SQL di AzureAzure SQL Database SìIstanza gestita di SQL di AzureAzure SQL Managed InstanceYesIstanza gestita di SQL di AzureAzure SQL Managed Instance sìAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics sìParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Specifica che l'hint per la query indicato deve essere utilizzato in tutta la query.Specifies that the indicated query hint should be used throughout the entire query. Sono consentiti più hint per la query. Ogni hint, tuttavia, può essere specificato una sola volta.Each query hint can be specified only one time, although multiple query hints are permitted. In una istruzione è consentito utilizzare una sola clausola OPTION.Only one OPTION clause can be specified with the statement.

La clausola può essere specificata nelle istruzioni SELECT, DELETE, UPDATE e MERGE.This clause can be specified in the SELECT, DELETE, UPDATE and MERGE statements.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
[ OPTION ( <query_hint> [ ,...n ] ) ]   
-- Syntax for Azure Synapse Analytics and Parallel Data 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  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgomentiArguments

query_hintquery_hint
Parole chiave che indicano quali hint di ottimizzazione vengono utilizzati per personalizzare la modalità di elaborazione dell'istruzione nel motore di database.Keywords that indicate which optimizer hints are used to customize the way the Database Engine processes the statement. Per altre informazioni, vedere Hint per la query (Transact-SQL).For more information, see Query Hints (Transact-SQL).

EsempiExamples

R.A. Uso di una clausola OPTION con una clausola GROUP BYUsing an OPTION clause with a GROUP BY clause

Nell'esempio seguente viene illustrato l'utilizzo della clausola OPTION con una clausola GROUP BY.The following example shows how the OPTION clause is used with a GROUP BY clause.

USE AdventureWorks2012;  
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 AnalyticsAzure Synapse Analytics e Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse

B.B. Istruzione SELECT con un'etichetta nella clausola OPTIONSELECT statement with a label in the OPTION clause

Nell'esempio seguente viene illustrata un'istruzione Microsoft Azure Synapse AnalyticsMicrosoft Azure Synapse AnalyticsSELECT semplice con un'etichetta nella clausola OPTION.The following example shows a simple Microsoft Azure Synapse AnalyticsMicrosoft Azure Synapse Analytics SELECT statement with a label in the OPTION clause.

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

C.C. Istruzione SELECT con un hint per la query nella clausola OPTIONSELECT statement with a query hint in the OPTION clause

Nell'esempio seguente viene illustrata un'istruzione SELECT che usa un hint per la query HASH JOIN nella clausola OPTION.The following example shows a SELECT statement that uses a HASH JOIN query hint in the OPTION clause.

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

D.D. Istruzione SELECT con un'etichetta e più hint per la query nella clausola OPTIONSELECT statement with a label and multiple query hints in the OPTION clause

L'esempio seguente è un'istruzione Microsoft Azure Synapse AnalyticsMicrosoft Azure Synapse Analytics SELECT che contiene un'etichetta e più hint per la query.The following example is a Microsoft Azure Synapse AnalyticsMicrosoft Azure Synapse Analytics SELECT statement that contains a label and multiple query hints. Quando viene eseguita la query sui nodi di calcolo, SQL ServerSQL Server applicherà un hash join o un merge join, in base alla strategia che SQL ServerSQL Server determina come ottimale.When the query is run on the Compute nodes, SQL ServerSQL Server will apply a hash join or merge join, according to the strategy that SQL ServerSQL Server decides is the most optimal.

-- 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.E. Tramite un hint per la query quando si eseguono query di una vistaUsing a query hint when querying a view

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.The following example creates a view named CustomerView and then uses a HASH JOIN query hint in a query that references a view and a table.

-- Uses AdventureWorks  
  
CREATE VIEW CustomerView  
AS  
SELECT CustomerKey, FirstName, LastName FROM ssawPDW..DimCustomer;  
  
SELECT COUNT (*) FROM dbo.CustomerView a  
INNER JOIN dbo.FactInternetSales b  
ON (a.CustomerKey = b.CustomerKey)  
OPTION (HASH JOIN);  
  
DROP VIEW CustomerView;

F.F. Query con un'istruzione sub-SELECT e un hint per la queryQuery with a subselect and a query hint

Nell'esempio seguente viene illustrata una query che contiene un'istruzione sub-SELECT e un hint per la query.The following example shows a query that contains both a subselect and a query hint. L'hint per la query viene applicato a livello globale.The query hint is applied globally. Non è consentito aggiungere hint per la query all'istruzione sub-SELECT.Query hints are not allowed to be appended to the subselect statement.

-- Uses AdventureWorks  
  
CREATE VIEW CustomerView AS  
SELECT CustomerKey, FirstName, LastName FROM ssawPDW..DimCustomer;  
  
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.G. Forzare l'ordine di join in modo che corrisponda a quello della queryForce the join order to match the order in the 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.The following example uses the FORCE ORDER hint to force the query plan to use the join order specified by the query. Ciò migliorerà le prestazioni in alcune query ma non in tutte.This will improve performance on some queries; not all queries.

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

Nell'esempio seguente viene forzata la distribuzione della clausola WHERE per il processo MapReduce nella tabella esterna Hadoop.The following example forces the pushdown of the WHERE clause to the MapReduce job on the external Hadoop table.

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.The following example prevents the pushdown of the WHERE clause to the MapReduce job on the external Hadoop table. Dove viene applicata la clausola WHERE, tutte le righe vengono restituite a PDW.All rows are returned to PDW where the WHERE clause is applied.

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

Vedere ancheSee Also

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