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
, HASH
ou 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