OPTION-Klausel (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Gibt an, dass der angezeigte Abfragehinweis in der gesamten Abfrage verwendet werden soll. Jeder Abfragehinweis kann nur einmal angegeben werden, obwohl mehrere Abfragehinweise zulässig sind. Es kann nur eine OPTION-Klausel pro Anweisung angegeben werden.

Diese Klausel kann in den Anweisungen SELECT, DELETE, UPDATE und MERGE angegeben werden.

Transact-SQL-Syntaxkonventionen

Syntax

Syntax für SQL Server und Azure SQL-Datenbank

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

Syntax für Azure Synapse Analytics und Analytics-Plattformsystem (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  

Syntax für Serverloser SQL-Pool in Azure Synapse Analytics

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

<query_option> ::=
    LABEL = label_name

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

query_hint
Schlüsselwörter, die angeben, dass Hinweise für den Optimierer verwendet werden, um die Verarbeitung der Anweisung durch die Datenbank-Engine anzupassen. Weitere Informationen finden Sie unter Abfragehinweise (Transact-SQL).

Beispiele

A. Verwenden einer OPTION-Klausel mit einer GROUP BY-Klausel

Im folgenden Beispiel wird gezeigt, wie die OPTION-Klausel in Verbindung mit einer GROUP BY-Klausel verwendet wird.

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  

Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

B. SELECT-Anweisung mit einer Bezeichnung in der OPTION-Klausel

Im folgenden Beispiel wird eine Azure Synapse Analytics-SELECT-Anweisung mit einer Bezeichnung in der OPTION-Klausel dargestellt.

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

C. SELECT-Anweisung mit einem Abfragehinweis in der OPTION-Klausel

Im folgenden Beispiel wird eine SELECT-Anweisung in der OPTION-Klausel dargestellt, die einen HASH JOIN-Abfragehinweis verwendet.

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

D. SELECT-Anweisung mit einer Bezeichnung und mehreren Abfragehinweisen in der OPTION-Klausel

Beim folgenden Beispiel handelt es sich um eine Azure Synapse Analytics-SELECT-Anweisung, die eine Bezeichnung und mehrere Abfragehinweise enthält. Bei der Ausführung der Abfrage auf den Computeknoten wendet SQL Server einen Hashjoin oder Merge Join an, je nachdem, welche Strategie SQL Server als optimal auswählt.

-- 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. Verwenden eines Abfragehinweises beim Abfragen einer Sicht

Im folgenden Beispiel wird eine Sicht mit dem Namen CustomerView erstellt und anschließend ein HASH JOIN-Abfragehinweis in einer Abfrage verwendet, die auf eine Sicht und eine Tabelle verweist.

-- 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. Abfrage mit einer untergeordneten SELECT-Anweisung und einem Abfragehinweis

Im folgenden Beispiel wird eine Abfrage dargestellt, die sowohl eine untergeordnete SELECT-Anweisung als auch einen Abfragehinweis enthält. Der Abfragehinweis wird global angewendet. Abfragehinweise dürfen nicht an die untergeordnete SELECT-Anweisung angefügt werden.

-- 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. Erzwingen der Übereinstimmung der Joinreihenfolge mit der Reihenfolge in der Abfrage

Im folgenden Beispiel wird der FORCE ORDER-Hinweis verwendet, um zu erzwingen, dass der Abfrageplan die von der Abfrage angegebene Joinreihenfolge verwendet. Dies verbessert die Leistung einiger Abfragen, jedoch nicht aller.

-- 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. Verwenden von EXTERNALPUSHDOWN

Im folgenden Beispiel wird die Weitergabe der WHERE-Klausel an den MapReduce-Auftrag in der externen Hadoop-Tabelle erzwungen.

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

Im folgenden Beispiel wird die Weitergabe der WHERE-Klausel an den MapReduce-Auftrag in der externen Hadoop-Tabelle verhindert. Wo die WHERE-Klausel angewendet wird, werden alle Zeilen an PDW zurückgegeben.

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

Weitere Informationen

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