OPTION (cláusula de Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Especifica que en toda la consulta se debe utilizar la sugerencia de consulta especificada. Solo se puede especificar cada sugerencia de consulta una vez, aunque se permiten varias sugerencias de consulta. Solo se puede especificar una cláusula OPTION con la instrucción.

Esta cláusula se puede especificar en las instrucciones SELECT, DELETE, UPDATE y MERGE.

Convenciones de sintaxis de Transact-SQL

Sintaxis

Sintaxis de SQL Server y Azure SQL Database

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

Sintaxis para Azure Synapse Analytics y Sistema de la plataforma de análisis (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  

Sintaxis para Grupo de SQL sin servidor en Azure Synapse Analytics

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

<query_option> ::=
    LABEL = label_name

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

query_hint
Palabras clave que indican qué sugerencias del optimizador se emplean para personalizar la forma en que el Motor de base de datos procesa la instrucción. Para obtener más información, consulte Sugerencias de consulta (Transact-SQL).

Ejemplos

A. Usar una cláusula OPTION con una cláusula GROUP BY

En el ejemplo siguiente se muestra cómo se usa la cláusula OPTION con una cláusula 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  

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

B. Instrucción SELECT con una etiqueta en la cláusula OPTION

En el ejemplo siguiente se muestra una instrucción SELECT de Azure Synapse Analytics con una etiqueta en la cláusula OPTION.

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

C. Instrucción SELECT con una sugerencia de consulta en la cláusula OPTION

En el ejemplo siguiente se muestra una instrucción SELECT que usa una sugerencia de consulta HASH JOIN en la cláusula OPTION.

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

D. Instrucción SELECT con una etiqueta y varias sugerencias de consulta en la cláusula OPTION

El ejemplo siguiente es una instrucción SELECT de Azure Synapse Analytics que contiene una etiqueta y varias sugerencias de consulta. Cuando se ejecuta la consulta en los nodos de proceso, SQL Server aplica una combinación hash o una combinación de mezcla, según la estrategia que SQL Server considere óptima.

-- 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. Usar una sugerencia de consulta al consultar a una vista

En el ejemplo siguiente se crea una vista denominada CustomerView y luego se usa una sugerencia de consulta HASH JOIN en una consulta que hace referencia a una vista y a una tabla.

-- 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. Consultar con una subselección y una sugerencia de consulta

En el ejemplo siguiente se muestra una consulta que contiene una subselección y una sugerencia de consulta. La sugerencia de consulta se aplica de forma global. No se permite anexar sugerencias de consulta a la instrucción de subselección.

-- 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. Hacer coincidir el orden de combinación con el orden de la consulta

En el ejemplo siguiente se usa la sugerencia FORCE ORDER para hacer que el plan de consulta emplee el orden de combinación especificado por la consulta. Esto mejora el rendimiento de algunas consultas, no de todas.

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

En el ejemplo siguiente se fuerza a la aplicación de la cláusula WHERE al trabajo MapReduce en la tabla externa de Hadoop.

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

En el ejemplo siguiente se evita la aplicación de la cláusula WHERE al trabajo MapReduce en la tabla externa de Hadoop. Todas las filas se devuelven a PDW, donde se aplica la cláusula WHERE.

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

Consulte también

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