OPTION (cláusula de Transact-SQL)OPTION Clause (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure Synapse Analytics (SQL DW) síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Especifica que en toda la consulta se debe utilizar la sugerencia de consulta especificada.Specifies that the indicated query hint should be used throughout the entire query. Solo se puede especificar cada sugerencia de consulta una vez, aunque se permiten varias sugerencias de consulta.Each query hint can be specified only one time, although multiple query hints are permitted. Solo se puede especificar una cláusula OPTION con la instrucción.Only one OPTION clause can be specified with the statement.

Esta cláusula se puede especificar en las instrucciones SELECT, DELETE, UPDATE y MERGE.This clause can be specified in the SELECT, DELETE, UPDATE and MERGE statements.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

query_hintquery_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.Keywords that indicate which optimizer hints are used to customize the way the Database Engine processes the statement. Para obtener más información, vea Sugerencias de consulta (Transact-SQL).For more information, see Query Hints (Transact-SQL).

EjemplosExamples

A.A. Usar una cláusula OPTION con una cláusula GROUP BYUsing an OPTION clause with a GROUP BY clause

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

Ejemplos: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) and Almacenamiento de datos paralelosParallel Data Warehouse

B.B. Instrucción SELECT con una etiqueta en la cláusula OPTIONSELECT statement with a label in the OPTION clause

En el ejemplo siguiente se muestra una instrucción SELECT simple de Almacenamiento de datos SQLSQL Data Warehouse con una etiqueta en la cláusula OPTION.The following example shows a simple Almacenamiento de datos SQLSQL Data Warehouse SELECT statement with a label in the OPTION clause.

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

C.C. Instrucción SELECT con una sugerencia de consulta en la cláusula OPTIONSELECT statement with a query hint in the OPTION clause

En el ejemplo siguiente se muestra una instrucción SELECT que usa una sugerencia de consulta HASH JOIN en la cláusula 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. Instrucción SELECT con una etiqueta y varias sugerencias de consulta en la cláusula OPTIONSELECT statement with a label and multiple query hints in the OPTION clause

El ejemplo siguiente es una instrucción SELECT de Almacenamiento de datos SQLSQL Data Warehouse que contiene una etiqueta y varias sugerencias de consulta.The following example is a Almacenamiento de datos SQLSQL Data Warehouse SELECT statement that contains a label and multiple query hints. Cuando se ejecuta la consulta en los nodos de proceso, SQL ServerSQL Server aplica una combinación hash o una combinación de mezcla, según la estrategia que SQL ServerSQL Server considere óptima.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. Usar una sugerencia de consulta al consultar a una vistaUsing a query hint when querying a view

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.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. Consultar con una subselección y una sugerencia de consultaQuery with a subselect and a query hint

En el ejemplo siguiente se muestra una consulta que contiene una subselección y una sugerencia de consulta.The following example shows a query that contains both a subselect and a query hint. La sugerencia de consulta se aplica de forma global.The query hint is applied globally. No se permite anexar sugerencias de consulta a la instrucción de subselección.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. Hacer coincidir el orden de combinación con el orden de la consultaForce the join order to match the order in the query

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.The following example uses the FORCE ORDER hint to force the query plan to use the join order specified by the query. Esto mejora el rendimiento de algunas consultas, no de todas.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. Usar EXTERNALPUSHDOWNUsing 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.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);  

En el ejemplo siguiente se evita la aplicación de la cláusula WHERE al trabajo MapReduce en la tabla externa de Hadoop.The following example prevents the pushdown of the WHERE clause to the MapReduce job on the external Hadoop table. Todas las filas se devuelven a PDW, donde se aplica la cláusula WHERE.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);  

Consulte tambiénSee Also

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