Compartilhar via


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.

Observação importanteImportante

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:

DELETE

SELECT

UPDATE

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

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