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

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseS’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Spécifie que l'indicateur de requête indiqué doit être utilisé dans l'ensemble de la requête.Specifies that the indicated query hint should be used throughout the entire query. Chaque indicateur de requête ne peut être spécifié qu'une seule fois, bien que plusieurs indicateurs de requête soient autorisés.Each query hint can be specified only one time, although multiple query hints are permitted. Une seule clause OPTION peut être spécifiée avec l'instruction.Only one OPTION clause can be specified with the statement.

Cette clause peut être spécifiée dans les instructions SELECT, DELETE, UPDATE et MERGE.This clause can be specified in the SELECT, DELETE, UPDATE and MERGE statements.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- 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  

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumentsArguments

query_hintquery_hint
Mots clés spécifiant les indicateurs d'optimiseur utilisés pour personnaliser la façon dont le moteur de base de données traite l'instruction.Keywords that indicate which optimizer hints are used to customize the way the Database Engine processes the statement. Pour plus d’informations, consultez Indicateurs de requête (Transact-SQL).For more information, see Query Hints (Transact-SQL).

ExemplesExamples

R.A. Utilisation d’une clause OPTION avec une clause GROUP BYUsing an OPTION clause with a GROUP BY clause

L'exemple suivant montre comment la clause OPTION est utilisée avec une clause 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  

Exemples : Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) et Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) and Parallel Data WarehouseParallel Data Warehouse

B.B. Instruction SELECT avec une étiquette dans la clause OPTIONSELECT statement with a label in the OPTION clause

L’exemple suivant montre une instruction SELECT Microsoft Azure Synapse Analytics (anciennement SQL Data Warehouse)Microsoft Azure Synapse Analytics (formerly SQL Data Warehouse) simple avec une étiquette dans la clause OPTION.The following example shows a simple Microsoft Azure Synapse Analytics (anciennement SQL Data Warehouse)Microsoft Azure Synapse Analytics (formerly SQL Data Warehouse) SELECT statement with a label in the OPTION clause.

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

C.C. Instruction SELECT avec un indicateur de requête dans la clause OPTIONSELECT statement with a query hint in the OPTION clause

L’exemple suivant montre une instruction SELECT qui utilise un indicateur de requête HASH JOIN dans la clause 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. Instruction SELECT avec une étiquette et plusieurs indicateurs de requête dans la clause OPTIONSELECT statement with a label and multiple query hints in the OPTION clause

L’exemple suivant est une instruction SELECT Microsoft Azure Synapse Analytics (anciennement SQL Data Warehouse)Microsoft Azure Synapse Analytics (formerly SQL Data Warehouse) qui contient une étiquette et plusieurs indicateurs de requête.The following example is a Microsoft Azure Synapse Analytics (anciennement SQL Data Warehouse)Microsoft Azure Synapse Analytics (formerly SQL Data Warehouse) SELECT statement that contains a label and multiple query hints. Quand la requête est exécutée sur les nœuds de calcul, SQL ServerSQL Server applique une jointure de hachage ou une jointure de fusion, selon la stratégie optimale déterminée par SQL ServerSQL Server.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. Utilisation d’un indicateur de requête pour interroger un affichageUsing a query hint when querying a view

L’exemple suivant crée un affichage nommé CustomerView, puis utilise un indicateur de requête HASH JOIN dans une requête qui fait référence à un affichage et une table.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. Requête avec une sous-sélection et un indicateur de requêteQuery with a subselect and a query hint

L’exemple suivant montre une requête qui contient une sous-sélection et un indicateur de requête.The following example shows a query that contains both a subselect and a query hint. L’indicateur de requête est appliqué globalement.The query hint is applied globally. Les indicateurs de requête ne doivent pas être ajoutés à l’instruction de sous-sélection.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. Forcer la correspondance entre l’ordre de jointure et l’ordre dans la requêteForce the join order to match the order in the query

L’exemple suivant utilise l’indicateur FORCE ORDER pour forcer le plan de requête à utiliser l’ordre de jointure spécifié par la requête.The following example uses the FORCE ORDER hint to force the query plan to use the join order specified by the query. Cela permet d’améliorer les performances de certaines requêtes, mais pas de toutes les requêtes.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. Utilisation de l’indicateur EXTERNALPUSHDOWNUsing EXTERNALPUSHDOWN

L’exemple suivant force l’envoi (pushdown) de la clause WHERE au travail MapReduce sur la table Hadoop externe.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);  

L’exemple suivant empêche l’envoi (pushdown) de la clause WHERE au travail MapReduce sur la table Hadoop externe.The following example prevents the pushdown of the WHERE clause to the MapReduce job on the external Hadoop table. Toutes les lignes sont retournées à PDW où la clause WHERE est appliquée.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);  

Voir aussiSee Also

Indicateurs (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)