Indicateurs de jointure (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Les indicateurs de jointure spécifient l'application, par l'optimiseur de requête, d'une stratégie de jointure entre deux tables dans SQL Server. Pour obtenir des informations générales sur les jointures et la syntaxe de jointure, consultez la clause FROM ainsi que JOIN, APPLY, PIVOT.

Attention

Étant donné que l'optimiseur de requête SQL Server sélectionne généralement le meilleur plan d'exécution pour une requête, nous vous recommandons de ne recourir à ces conseils qu'en dernier ressort et seulement si vous êtes un développeur ou un administrateur de base de données expérimenté.

S’applique à

Conventions de la syntaxe Transact-SQL

Syntaxe

<join_hint> ::=
     { LOOP | HASH | MERGE | REMOTE }

Arguments

{ LOOP | HASH | MERGE }

Spécifie que la jointure dans la requête doit utiliser les boucles, le hachage ou la fusion. Utilisation LOOP, HASHou MERGE JOIN applique une jointure particulière entre deux tables. LOOP ne peut pas être spécifié avec RIGHT ou FULL en tant que type de jointure. Pour plus d’informations, consultez Jointures.

REMOTE

Effectue une opération de jointure sur le site de la table de droite. Ceci est utile lorsque la table de gauche est une table locale et que celle de droite est une table distante. REMOTE ne doit être utilisé que lorsque la table de gauche comporte moins de lignes que la table de droite.

Si la table de droite est une table locale, la jointure sera effectuée en local. Si les deux tables sont distantes mais provenant de différentes sources de données, REMOTE la jointure est effectuée sur le site de la table appropriée. Si les deux tables sont des tables distantes à partir de la même source de données, REMOTE n’est pas nécessaire.

REMOTE ne peut pas être utilisé lorsque l’une des valeurs comparées dans le prédicat de jointure est convertie en un classement différent à l’aide de la COLLATE clause.

REMOTE ne peut être utilisé que pour INNER JOIN les opérations.

Notes

Les indicateurs de jointure sont spécifiés dans la FROM clause d’une requête. Les indicateurs de jointure appliquent une stratégie de jointure entre deux tables. Si un indicateur de jointure est spécifié pour deux tables, l’optimiseur de requête applique automatiquement l’ordre de jointure pour toutes les tables jointes de la requête, en fonction de la position des ON mots clés. Lorsqu’une CROSS JOIN clause est utilisée sans clause ON , les parenthèses peuvent être utilisées pour indiquer l’ordre de jointure.

Exemples

Les exemples de code Transact-SQL de cet article sont fondés sur l’échantillon de base de données AdventureWorks2022 ou AdventureWorksDW2022 fourni, que vous pouvez télécharger à partir de la page d’accueil Échantillons et projets communautaires Microsoft SQL Server.

A. Utiliser HASH

L'exemple suivant spécifie que l'opération JOIN figurant dans la requête est effectuée par une jointure 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. Utiliser LA BOUCLE

L'exemple suivant spécifie que l'opération JOIN figurant dans la requête est effectuée par une jointure 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. Utiliser MERGE

L'exemple suivant spécifie que l'opération JOIN figurant dans la requête est effectuée par une jointure 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