Clause OPTION (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

Spécifie que l'indicateur de requête indiqué doit être utilisé dans l'ensemble de la requête. Chaque indicateur de requête ne peut être spécifié qu'une seule fois, bien que plusieurs indicateurs de requête soient autorisés. Une seule clause OPTION peut être spécifiée avec l'instruction.

Cette clause peut être spécifiée dans les instructions SELECT, DELETE, UPDATE et MERGE.

Conventions de la syntaxe Transact-SQL

Syntaxe

Syntaxe pour SQL Server et Azure SQL Database

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

Syntaxe pour Azure Synapse Analytics et 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  

Syntaxe pour Pool SQL serverless dans Azure Synapse Analytics

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

<query_option> ::=
    LABEL = label_name

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

query_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. Pour plus d’informations, consultez Indicateurs de requête (Transact-SQL).

Exemples

R. Utilisation d’une clause OPTION avec une clause GROUP BY

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

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

B. Instruction SELECT avec une étiquette dans la clause OPTION

L’exemple suivant montre une instruction SELECT Azure Synapse Analytics avec une étiquette dans la clause OPTION.

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

C. Instruction SELECT avec un indicateur de requête dans la clause OPTION

L’exemple suivant montre une instruction SELECT qui utilise un indicateur de requête HASH JOIN dans la clause OPTION.

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

D. Instruction SELECT avec une étiquette et plusieurs indicateurs de requête dans la clause OPTION

L’exemple suivant est une instruction SELECT Azure Synapse Analytics qui contient une étiquette et plusieurs indicateurs de requête. Quand la requête est exécutée sur les nœuds de calcul, SQL Server applique une jointure de hachage ou une jointure de fusion, selon la stratégie optimale déterminée par 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. Utilisation d’un indicateur de requête pour interroger un affichage

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.

-- 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. Requête avec une sous-sélection et un indicateur de requête

L’exemple suivant montre une requête qui contient une sous-sélection et un indicateur de requête. L’indicateur de requête est appliqué globalement. Les indicateurs de requête ne doivent pas être ajoutés à l’instruction de sous-sélection.

-- 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. Forcer la correspondance entre l’ordre de jointure et l’ordre dans la requête

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. Cela permet d’améliorer les performances de certaines requêtes, mais pas de toutes les requêtes.

-- 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. Utilisation de l’indicateur EXTERNALPUSHDOWN

L’exemple suivant force l’envoi (pushdown) de la clause WHERE au travail MapReduce sur la table Hadoop externe.

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. Toutes les lignes sont retournées à PDW où la clause WHERE est appliquée.

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

Voir aussi

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