Cláusula OPTION (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse 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 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 and Analytics Platform System (PDW) e o ponto de extremidade da 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
Observação
Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) 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 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 dica OPTION
de HASH JOIN
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 associação de hash ou uma 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 durante a consulta de uma exibição
O exemplo a seguir cria um modo de exibição chamado CustomerView e usa uma HASH JOIN
dica de 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. 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 dica FORCE ORDER
para forçar o plano de consulta a usar a ordem de associaçã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 o 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 o WHERE
pushdown da cláusula para o trabalho 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
Conteúdo relacionado
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários