Indicateurs de jointure (Transact-SQL)

Les indicateurs de jointure spécifient l'application, par l'optimiseur de requête, d'une stratégie de jointure entre deux tables.

Important

É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 recommandons de ne recourir aux indicateurs, y compris <join_hint>, qu'en dernier ressort, et à condition d'être un développeur ou un administrateur de base de données expérimenté.

S'applique à :

DELETE

SELECT

UPDATE

Icône Lien de rubriqueConventions de la syntaxe de 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. L'utilisation des arguments LOOP | HASH | MERGE JOIN applique un type de jointure particulier entre deux tables. LOOP ne peut pas être spécifié en même temps que RIGHT ou FULL en tant que type de jointure.

  • 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. L'argument REMOTE ne doit être utilisé que lorsque la table de gauche possède moins de lignes que celle de droite.

    Si la table de droite est une table locale, la jointure sera effectuée en local. Si les deux tables sont des tables distantes mais qu'elles proviennent de sources de données différentes, REMOTE provoque l'exécution de la jointure sur le site de la table de droite. Si les deux tables sont des tables distantes provenant 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 affecté à un autre classement à l'aide de la clause COLLATE.

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

Notes

Les indicateurs de jointure sont spécifiés dans la clause FROM 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êtes applique automatiquement l'ordre de jointure de toutes les tables jointes de la requête, d'après la position des mots clés ON. Lorsqu'une jointure CROSS JOIN est utilisée sans la clause ON, l'ordre de jointure peut être indiqué au moyen de parenthèses.

Exemples

A. Utilisation de HASH

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

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

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