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 no SQL Server 2012. Para obter informações gerais sobre junções e a sintaxe de junção, consulte FROM (Transact-SQL).

Observação importanteImportante

Como o otimizador de consultas do SQL Server costuma selecionar o melhor plano de execução para uma consulta, é recomendável 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ópico Convençõ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 AdventureWorks2012;
GO
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. Usando LOOP

O exemplo a seguir especifica que a operação JOIN na consulta é executada por uma junção LOOP.

USE AdventureWorks2012;
GO
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. Usando MERGE

O exemplo a seguir especifica que a operação JOIN na consulta é executada por uma junção MERGE.

USE AdventureWorks2012;
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

Referência

dicas (Transact-SQL)