Join-Hinweise (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Joinhinweise geben an, dass der Abfrageoptimierer eine Joinstrategie zwischen zwei Tabellen in SQL Server erzwingt. Allgemeine Informationen zur Verknüpfungs- und Verknüpfungssyntax finden Sie unter FROM-Klausel plus JOIN, APPLY, PIVOT.
Achtung
Da der SQL Server-Abfrageoptimierer in der Regel den optimalen Ausführungsplan für eine Abfrage auswählt, wird empfohlen, dass erfahrene Entwickler und Datenbankadministratoren Hinweise nur dann verwenden, wenn alle anderen Möglichkeiten sich als unzureichend erwiesen haben.
Gilt für:
Transact-SQL-Syntaxkonventionen
Syntax
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE }
Argumente
{ LOOP | HASH | MERGE }
Legt fest, dass der Join in der Abfrage Schleifen, Hashing oder Zusammenführen verwenden soll. HASH
MERGE JOIN
Verwenden oder LOOP
Erzwingen einer bestimmten Verknüpfung zwischen zwei Tabellen. LOOP
kann nicht zusammen mit RIGHT
oder FULL
als Verknüpfungstyp angegeben werden. Weitere Informationen finden Sie im Artikel Joins (SQL Server).
REMOTE
Gibt an, dass der Joinvorgang am Standort der rechten Tabelle ausgeführt wird. Dies ist hilfreich, falls die linke Tabelle eine lokale und die rechte eine Remotetabelle ist. REMOTE
sollte nur verwendet werden, wenn die linke Tabelle weniger Zeilen als die rechte Tabelle enthält.
Ist die rechte Tabelle lokal, wird der Join lokal ausgeführt. Wenn beide Tabellen remote, aber aus unterschiedlichen Datenquellen stammen, REMOTE
wird die Verknüpfung auf der Website der rechten Tabelle ausgeführt. Wenn beide Tabellen Remotetabellen aus derselben Datenquelle sind, REMOTE
ist dies nicht erforderlich.
REMOTE
kann nicht verwendet werden, wenn einer der Werte, die im Join-Prädikat verglichen werden, mithilfe der COLLATE
Klausel in eine andere Sortierung umgestellt wird.
REMOTE
kann nur für INNER JOIN
Vorgänge verwendet werden.
Hinweise
Verknüpfungshinweise werden in der FROM
Klausel einer Abfrage angegeben. Sie erzwingen eine Joinstrategie zwischen zwei Tabellen. Wenn für zwei Tabellen ein Verknüpfungshinweis angegeben wird, erzwingt der Abfrageoptimierer automatisch die Verknüpfungsreihenfolge für alle verknüpften Tabellen in der Abfrage basierend auf der Position der ON
Schlüsselwörter. Wenn eine CROSS JOIN
ohne die ON
Klausel verwendet wird, können Klammern verwendet werden, um die Verknüpfungsreihenfolge anzugeben.
Beispiele
Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022
- oder AdventureWorksDW2022
-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.
A. Verwenden von HASH
Im folgenden Beispiel wird der JOIN
-Vorgang in der Abfrage durch einen HASH
-Join ausgeführt.
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. Verwenden von LOOP
Im folgenden Beispiel wird der JOIN
-Vorgang in der Abfrage durch einen LOOP
-Join ausgeführt.
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. Verwenden von MERGE
Im folgenden Beispiel wird der JOIN
-Vorgang in der Abfrage durch einen MERGE
-Join ausgeführt.
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