Cláusula OPTION (Transact-SQL)

Aplica-se a: simSQL Server (todas as versões compatíveis) SimBanco de Dados SQL do Azure SimInstância Gerenciada do Azure SQL simAzure Synapse Analytics simParallel Data Warehouse

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 sejam permitidas várias dicas de consulta. Somente uma cláusula OPTION pode ser especificada com a instrução.

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

Ícone de link do tópico Convenções da sintaxe Transact-SQL

Sintaxe

Sintaxe para SQL Server e Banco de Dados SQL do Azure.

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

Sintaxe para Azure Synapse Analytics e PDW (Analytics Platform System)

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 de SQL sem servidor no Azure Synapse Analytics

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

<query_option> ::=
    LABEL = label_name

Observação

Para ver a sintaxe do Transact-SQL para o SQL Server 2014 e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

query_hint
Palavras-chave que indicam as dicas de otimização são usadas para personalizar a forma como o Mecanismo de Banco de Dados processa a instrução. Para obter mais informações, veja Dicas de consulta (Transact-SQL).

Exemplos

a. Usando uma cláusula OPTION com uma cláusula GROUP BY

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

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  

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

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

O exemplo a seguir mostra uma instrução Microsoft Azure Synapse Analytics SELECT simples com um rótulo na cláusula OPTION.

-- Uses AdventureWorks  
  
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 instrução SELECT que usa uma dica de consulta HASH JOIN na 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. Instrução SELECT com um rótulo e várias dicas de consulta na cláusula OPTION

O exemplo a seguir é uma instrução Microsoft Azure Synapse Analytics SELECT que contém um rótulo e várias dicas de consulta. Quando a consulta for executada nos nós de Computação, SQL Server aplicará uma junção hash ou junção de mesclagem, de acordo com a estratégia que o SQL Server decidir que é o ideal.

-- 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. Usando uma dica de consulta durante a consulta de uma exibição

O exemplo a seguir cria uma exibição chamada CustomerView e, em seguida, usa uma dica de consulta HASH JOIN em uma consulta que referencia uma exibição e uma tabela.

-- 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 com uma subseleção e 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. Dicas de consulta não podem ser acrescentadas à instrução de subseleção.

-- 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. Forçar a ordem de junção para que ela corresponda à 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. Isso melhorará o desempenho em algumas consultas, mas nem 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. Usando EXTERNALPUSHDOWN

O exemplo a seguir força a aplicação da cláusula WHERE ao trabalho MapReduce na tabela externa do Hadoop.

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

O exemplo a seguir impede a aplicação da cláusula WHERE ao trabalho MapReduce na tabela externa do Hadoop. Todas as linhas são retornadas ao PDW em que a cláusula WHERE é aplicada.

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

Consulte Também

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