dicas de junção (Transact-SQL)
Dicas de junção especificam que o otimizador de consulta força uma estratégia de junção entre duas tabelas.
Importante |
---|
Como o otimizador de consultas do SQL Server seleciona, em geral, o melhor plano de execução para uma consulta, recomendamos que dicas, como <join_hint>, sejam usadas apenas como último recurso por desenvolvedores e administradores de banco de dados experientes. |
Aplica-se a:
Sintaxe
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE }
Argumentos
LOOP | HASH | MERGE
Especifica que a junção na consulta deve usar loop, hash ou mesclagem. O uso de LOOP | HASH | MERGE JOIN força uma junção específica entre duas tabelas. LOOP não pode ser especificado com RIGHT ou FULL como um tipo de junção.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 deverá ser usado somente quando a tabela esquerda tiver menos linhas do que a tabela 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 direita. Se ambas as tabelas forem tabelas remotas da mesma fonte de dados, REMOTE não será requerido.
REMOTE não poderá ser usado quando um dos valores que são comparados no predicado de junção for lançado em um agrupamento diferente usando a cláusula COLLATE.
REMOTE poderá ser usado somente para operações de INNER JOIN.
Comentários
Dicas de junção são especificadas na cláusula FROM 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 qualquer uma das duas tabelas, o otimizador de consulta forçará a ordem de junção automaticamente para todas as tabelas associadas na consulta, com base na posição das palavras-chave ON. Quando CROSS JOIN for usado sem a cláusula ON, poderão ser usados parênteses para indicar a ordem da junção.
Exemplos
A. Usando HASH
O exemplo a seguir especifica que a operação JOIN na consulta é executada por uma junção HASH.
USE AdventureWorks2008R2;
GO
SELECT p.Name, pr.ProductReviewID
FROM Production.Product p
LEFT OUTER HASH JOIN Production.ProductReview pr
ON p.ProductID = pr.ProductID
ORDER BY ProductReviewID DESC;
B. Usando LOOP
O exemplo a seguir especifica que a operação JOIN na consulta é executada por uma junção LOOP.
USE AdventureWorks2008R2;
GO
DELETE FROM Sales.SalesPersonQuotaHistory
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER LOOP JOIN Sales.SalesPerson AS sp
ON spqh.BusinessEntityID = sp.BusinessEntityID
WHERE sp.SalesYTD > 2500000.00;
GO
C. Usando MERGE
O exemplo a seguir especifica que a operação JOIN na consulta é executada por uma junção MERGE.
USE AdventureWorks2008R2;
GO
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
Consulte também