Dicas de junção (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Dicas de junção especificam que o otimizador de consulta força uma estratégia de junção entre duas tabelas no SQL Server. Para obter informações gerais sobre junções e sintaxe de junção, consulte a cláusula FROM mais JOIN, APPLY, PIVOT.
Cuidado
Como o otimizador de consulta do SQL Server normalmente seleciona o melhor plano de execução para uma consulta, é recomendável que desenvolvedores e administradores de banco de dados experientes usem as dicas apenas como um último recurso.
Aplicável ao
Convenções de sintaxe de Transact-SQL
Sintaxe
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE }
Argumentos
{ LOOP | HASH | MESCLAR }
Especifica que a junção na consulta deve usar loop, hash ou mesclagem. Usar LOOP
, HASH
, ou MERGE JOIN
impõe uma junção específica entre duas tabelas. LOOP
não pode ser especificado junto com RIGHT
ou FULL
como um tipo de junção. Para obter mais informações, confira as Junções.
REMOTE
Especifica que a operação de junção é executada no site da tabela direita. Isso é útil quando a tabela esquerda é uma tabela local e a tabela direita é uma tabela remota. REMOTE
deve ser usado somente quando a tabela da esquerda tiver menos linhas do que a tabela da direita.
Se a tabela direita for local, a junção será executada localmente. Se ambas as tabelas forem remotas, mas de fontes de dados diferentes, REMOTE
fará com que a junção seja executada no site da tabela correta. Se ambas as tabelas forem tabelas remotas da mesma fonte de dados, REMOTE
não será necessário.
REMOTE
não pode ser usado quando um dos valores que estão sendo comparados no predicado de junção é convertido em um agrupamento diferente usando a COLLATE
cláusula.
REMOTE
pode ser usado apenas para INNER JOIN
operações.
Comentários
As dicas de junção são especificadas na FROM
cláusula de uma consulta. Dicas de Junção forçam uma estratégia de junção entre duas tabelas. Se uma dica de junção for especificada para duas tabelas, o otimizador de consulta aplicará automaticamente a ordem de junção para todas as tabelas unidas na consulta, com base na posição das ON
palavras-chave. Quando a CROSS JOIN
é usado sem a ON
cláusula, os parênteses podem ser usados para indicar a ordem de junção.
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 HASH
O exemplo a seguir especifica que a operação JOIN
na consulta é executada por uma junção HASH
.
SELECT p.Name,
pr.ProductReviewID
FROM Production.Product AS p
LEFT OUTER HASH JOIN Production.ProductReview AS pr
ON p.ProductID = pr.ProductID
ORDER BY ProductReviewID DESC;
B. Usar LOOP
O exemplo a seguir especifica que a operação JOIN
na consulta é executada por uma junção LOOP
.
DELETE
FROM Sales.SalesPersonQuotaHistory
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER LOOP JOIN Sales.SalesPerson AS sp
ON spqh.SalesPersonID = sp.SalesPersonID
WHERE sp.SalesYTD > 2500000.00;
GO
C. Usar MESCLAR
O exemplo a seguir especifica que a operação JOIN
na consulta é executada por uma junção MERGE
.
SELECT poh.PurchaseOrderID,
poh.OrderDate,
pod.ProductID,
pod.DueDate,
poh.VendorID
FROM Purchasing.PurchaseOrderHeader AS poh
INNER MERGE JOIN Purchasing.PurchaseOrderDetail AS pod
ON poh.PurchaseOrderID = pod.PurchaseOrderID;
GO