Cláusula OPTION (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Warehouse en Microsoft Fabric Base de datos SQL de 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 para SQL Server, Azure SQL Instancia administrada y Azure SQL Database:
[ OPTION ( <query_hint> [ , ...n ] ) ]
Sintaxis para Warehouse en Microsoft Fabric:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name |
<query_hint>
<query_hint> ::=
HASH JOIN
| LOOP JOIN
| MERGE JOIN
| FORCE ORDER
| { FORCE | DISABLE } EXTERNALPUSHDOWN
| FOR TIMESTAMP AS OF '<point_in_time>'
Sintaxis de Azure Synapse Analytics and Analytics Platform System (PDW) y punto de conexión de sql Analytics en Microsoft Fabric:
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 del grupo de SQL sin servidor en Azure Synapse Analytics:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name
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 más información, consulte Sugerencias de consultas.
Ejemplos
Los ejemplos de código de Transact-SQL de este artículo utilizan la base de datos de ejemplo AdventureWorks2022
o AdventureWorksDW2022
, que se puede descargar desde la página principal de Ejemplos y proyectos de la comunidad de Microsoft SQL Server.
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 de Azure Synapse Analytics SELECT
con una etiqueta en la OPTION
cláusula .
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 SELECT
instrucción que usa una HASH JOIN
sugerencia de consulta en la OPTION
cláusula .
-- 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 de Azure Synapse Analytics SELECT
que contiene una etiqueta y varias sugerencias de consulta. Cuando la consulta se ejecuta en los nodos de proceso, SQL Server aplica una combinación hash o combinación de mezcla, según la estrategia que SQL Server decide es la más óptima.
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, a continuación, se usa una HASH JOIN
sugerencia de consulta en una consulta que hace referencia a una vista y una tabla.
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. Las sugerencias de consulta no se pueden anexar a la instrucción subselect.
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 FORCE ORDER
sugerencia para forzar que el plan de consulta use el orden de combinación especificado por la consulta. Esta sugerencia mejora el rendimiento de algunas consultas, pero no todas las consultas.
Esta consulta obtiene números de partición, valores de límite, tipos de valores de límite y filas por límite para las particiones de la ProspectiveBuyer
tabla de la ssawPDW
base de datos.
SELECT sp.partition_number,
prv.value AS boundary_value,
lower(sty.name) AS boundary_value_type,
sp.rows
FROM sys.tables st
INNER JOIN sys.indexes si
ON st.object_id = si.object_id AND si.index_id < 2
INNER JOIN sys.partitions sp
ON sp.object_id = st.object_id AND sp.index_id = si.index_id
INNER JOIN sys.partition_schemes ps
ON ps.data_space_id = si.data_space_id
INNER JOIN sys.partition_range_values prv
ON prv.function_id = ps.function_id
INNER JOIN sys.partition_parameters pp
ON pp.function_id = ps.function_id
INNER 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 la inserción de la WHERE
cláusula al trabajo de MapReduce en la tabla de Hadoop externa.
SELECT ID FROM External_Table_AS A
WHERE ID < 1000000
OPTION (FORCE EXTERNALPUSHDOWN);
En el ejemplo siguiente se evita la inserción de la WHERE
cláusula en el trabajo de MapReduce en la tabla de Hadoop externa. Todas las filas se devuelven a PDW donde se aplica la WHERE
cláusula .
SELECT ID FROM External_Table_AS A
WHERE ID < 10
OPTION (DISABLE EXTERNALPUSHDOWN);
I. Consulta de datos a partir de un momento dado
Esto se aplica a: Warehouse en Microsoft Fabric
Para obtener más información, consulte la sugerencia de consulta FOR TIMESTAMP.
Use la sintaxis TIMESTAMP
de la cláusula OPTION
para consultar los datos tal como existía en el pasado, en Synapse Data Warehouse en Microsoft Fabric. La siguiente consulta de ejemplo devuelve datos tal como aparecían el 13 de marzo de 2024 a las 7:39:35.28 UTC. La zona horaria siempre está en UTC.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey
OPTION (FOR TIMESTAMP AS OF '2024-03-13T19:39:35.28');--March 13, 2024 at 7:39:35.28 PM UTC