Cláusula OPTION (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse 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 sejam permitidas várias dicas de consulta. Apenas uma cláusula OPTION
pode ser especificada com a instrução.
Essa cláusula pode ser especificada nas instruções SELECT
, DELETE
, UPDATE
e MERGE
.
Convenções de sintaxe de Transact-SQL
Sintaxe
Sintaxe para SQL Server, Instância Gerenciada de SQL do Azure e Banco de Dados SQL do Azure:
[ OPTION ( <query_hint> [ , ...n ] ) ]
Sintaxe para 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 para o Azure Synapse Analytics e o PDW (Analytics Platform System) e o ponto de extremidade de análise do 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 de SQL sem servidor no Azure Synapse Analytics:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name
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 saber mais, confira Dicas de consulta.
Exemplos
Os exemplos de código do Transact-SQL deste artigo usa o banco de dados de exemplo AdventureWorks2022
ou AdventureWorksDW2022
, que pode ser baixado da home page Microsoft SQL Server Samples and Community Projects.
R. Usar 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 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 PDW (Analytics Platform System)
B. Instrução SELECT com um rótulo na cláusula OPTION
O exemplo a seguir mostra uma instrução do Azure Synapse Analytics SELECT
com um rótulo na OPTION
cláusula.
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 de consulta na 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. 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 junçã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 durante a consulta de uma exibição
O exemplo a seguir cria uma exibição chamada CustomerView e, em seguida, usa uma dica de HASH JOIN
consulta em uma consulta que faz referência a uma exibição e a 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. 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. 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 que ela corresponda à ordem na consulta
O exemplo a seguir usa a FORCE ORDER
dica 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.
Essa 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 banco de ssawPDW
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 a tarefa 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 WHERE
cláusula para a tarefa MapReduce na tabela externa do Hadoop. Todas as linhas são retornadas ao PDW onde a WHERE
cláusula é aplicada.
SELECT ID FROM External_Table_AS A
WHERE ID < 10
OPTION (DISABLE EXTERNALPUSHDOWN);
I. Consultar dados em um ponto no tempo
Aplica-se a:Depósito no Microsoft Fabric
Para obter mais informações, confira a dica de consulta FOR TIMESTAMP.
Use a sintaxe TIMESTAMP
na cláusula OPTION
para consultar dados como existiam no passado no Synapse Data Warehouse no Microsoft Fabric. A consulta de amostra a seguir retorna dados como apareciam em 13 de março de 2024 às 19h39min35,28s UTC. O fuso horário é 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