Cláusula OPTION (Transact-SQL)OPTION Clause (Transact-SQL)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simSQL Data Warehouse do Azure simParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Especifica que a dica de consulta indicada deve ser usada em toda a consulta.Specifies that the indicated query hint should be used throughout the entire query. Cada dica de consulta pode ser especificada apenas uma vez, embora sejam permitidas várias dicas de consulta.Each query hint can be specified only one time, although multiple query hints are permitted. Somente uma cláusula OPTION pode ser especificada com a instrução.Only one OPTION clause can be specified with the statement.

Esta cláusula pode ser especificada nas instruções SELECT, DELETE, UPDATE e MERGE.This clause can be specified in the SELECT, DELETE, UPDATE and MERGE statements.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

-- 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
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.Keywords that indicate which optimizer hints are used to customize the way the Database Engine processes the statement. Para obter mais informações, veja Dicas de consulta (Transact-SQL).For more information, see Query Hints (Transact-SQL).

ExemplosExamples

A.A. Usando uma cláusula OPTION com uma cláusula GROUP BYUsing an OPTION clause with a GROUP BY clause

O exemplo a seguir mostra como a cláusula OPTION é usada com uma 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  

Exemplos: Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

B.B. Instrução SELECT com um rótulo na cláusula OPTIONSELECT statement with a label in the OPTION clause

O exemplo a seguir mostra uma instrução SQL Data WarehouseSQL Data Warehouse SELECT simples com um rótulo na cláusula OPTION.The following example shows a simple SQL Data WarehouseSQL Data Warehouse SELECT statement with a label in the OPTION clause.

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

C.C. Instrução SELECT com uma dica de consulta na cláusula OPTIONSELECT statement with a query hint in the OPTION clause

O exemplo a seguir mostra uma instrução SELECT que usa uma dica de consulta HASH JOIN na 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. Instrução SELECT com um rótulo e várias dicas de consulta na cláusula OPTIONSELECT statement with a label and multiple query hints in the OPTION clause

O exemplo a seguir é uma instrução SQL Data WarehouseSQL Data Warehouse SELECT que contém um rótulo e várias dicas de consulta.The following example is a SQL Data WarehouseSQL Data Warehouse SELECT statement that contains a label and multiple query hints. Quando a consulta for executada nos nós de Computação, SQL ServerSQL Server aplicará uma junção hash ou junção de mesclagem, de acordo com a estratégia que o SQL ServerSQL Server decidir que é o ideal.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. Usando uma dica de consulta durante a consulta de uma exibiçãoUsing a query hint when querying a view

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.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 com uma subseleção e dica de consultaQuery with a subselect and a query hint

O exemplo a seguir mostra uma consulta que contém uma subseleção e uma dica de consulta.The following example shows a query that contains both a subselect and a query hint. A dica de consulta é aplicada globalmente.The query hint is applied globally. Dicas de consulta não podem ser acrescentadas à instrução de subseleção.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. Forçar a ordem de junção para que ela corresponda à ordem na consultaForce the join order to match the order in the query

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.The following example uses the FORCE ORDER hint to force the query plan to use the join order specified by the query. Isso melhorará o desempenho em algumas consultas, mas nem 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. Usando EXTERNALPUSHDOWNUsing EXTERNALPUSHDOWN

O exemplo a seguir força a aplicação da cláusula WHERE ao trabalho MapReduce na tabela externa do 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);  

O exemplo a seguir impede a aplicação da cláusula WHERE ao trabalho MapReduce na tabela externa do Hadoop.The following example prevents the pushdown of the WHERE clause to the MapReduce job on the external Hadoop table. Todas as linhas são retornadas ao PDW em que a cláusula WHERE é aplicada.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 TambémSee 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)