Partilhar via


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