Partilhar via


Cláusula OPTION (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade 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>'

Sintaxe do Azure Synapse Analytics and Analytics Platform System (PDW) e do ponto de extremidade de análise SQL 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

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 usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.

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 e Analytics Platform System (PDW)

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 PDW 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');