Cláusula OPTION (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsEndpoint de análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de dados SQL no Microsoft Fabric

Especifica que a dica de consulta indicada deve ser usada em toda a consulta. Cada dica de consulta pode ser especificada apenas uma vez, embora várias dicas de consulta sejam permitidas. Apenas uma OPTION cláusula pode ser especificada com a declaração.

Esta cláusula pode ser especificada nas SELECTinstruções , DELETE, UPDATE, e MERGE .

Transact-SQL convenções de sintaxe

Syntax

Sintaxe do SQL Server, da Instância Gerenciada SQL do Azure e do Banco de Dados SQL do Azure:

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

Sintaxe do Warehouse no 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>'

Syntax for Azure Synapse Analytics e endpoint SQL analytics in 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

Sintaxe para pool SQL sem servidor no Azure Synapse Analytics:

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

<query_option> ::=
    LABEL = label_name

Arguments

query_hint

Palavras-chave que indicam quais dicas do otimizador são usadas para personalizar a maneira como o Mecanismo de Banco de Dados processa a instrução. Para obter mais informações, consulte Dicas de consulta.

Examples

Os exemplos de código neste artigo utilizam a AdventureWorks2025 base de dados de exemplos ORAdventureWorksDW2025, que pode descarregar do repositório GitHub do Azure Data SQL Samples Repository.

A. Use uma cláusula OPTION com uma cláusula GROUP BY

O exemplo a seguir mostra como a OPTION cláusula é usada com uma GROUP BY cláusula.

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

Exemplos: Azure Synapse Analytics

B. Declaração SELECT com um rótulo na cláusula OPTION

O exemplo seguinte mostra uma SELECT afirmação com um rótulo na OPTION oração.

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

C. Instrução SELECT com uma dica de consulta na cláusula OPTION

O exemplo a seguir mostra uma SELECT instrução que usa uma HASH JOIN dica OPTION de consulta na cláusula.

-- Uses AdventureWorks

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

D. Instrução SELECT com um rótulo e várias dicas de consulta na cláusula OPTION

O exemplo a seguir é uma instrução do Azure Synapse Analytics SELECT que contém um rótulo e várias dicas de consulta. Quando a consulta é executada nos nós de computação, o SQL Server aplica uma junção de hash ou associação de mesclagem, de acordo com a estratégia que o SQL Server decide ser a mais ideal.

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 uma dica de consulta ao consultar um modo de exibição

O exemplo a seguir cria um modo de exibição chamado CustomerView e, em seguida, usa uma dica de HASH JOIN consulta em uma consulta que faz referência a um modo de exibição e uma tabela.

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. Consulta com uma subseleção e uma dica de consulta

O exemplo a seguir mostra uma consulta que contém uma subseleção e uma dica de consulta. A dica de consulta é aplicada globalmente. As dicas de consulta não podem ser acrescentadas à instrução 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. Forçar a ordem de junção para corresponder à ordem na consulta

O exemplo a seguir usa a dica FORCE ORDER para forçar o plano de consulta a usar a ordem de junção especificada pela consulta. Essa dica melhora o desempenho em algumas consultas, mas não em todas.

Esta consulta obtém números de partição, valores de limite, tipos de valor de limite e linhas por limite para as partições na ProspectiveBuyer tabela do ssawPDW banco de dados.

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

O exemplo a seguir força o WHERE pushdown da cláusula para o trabalho MapReduce na tabela Hadoop externa.

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

O exemplo a seguir impede o WHERE pushdown da cláusula para o trabalho MapReduce na tabela Hadoop externa. Todas as linhas são devolvidas ao Database Engine onde a WHERE cláusula é aplicada.

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

Exemplos: Microsoft Fabric Data Warehouse

I. Consultar dados a partir de um point-in-time

Para obter mais informações, consulte FOR TIMESTAMP query hint.

Use a TIMESTAMP sintaxe na OPTION cláusula para consultar dados como existiam no passado, no Fabric Data Warehouse. A consulta de exemplo a seguir retorna dados como apareceram em 13 de março de 2024 às 19:39:35.28 UTC. O fuso horário está sempre em 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

J. Declaração SELECT com um rótulo na cláusula OPTION

O exemplo seguinte mostra uma SELECT afirmação com um rótulo na OPTION oração. Para mais informações, consulte Rótulos de consulta no Fabric Data Warehouse.

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