Hinweise (Transact-SQL) - Join
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance
Joinhinweise geben an, dass der Abfrageoptimierer eine Joinstrategie zwischen zwei Tabellen in SQL Server erzwingt. Allgemeine Informationen zu Joins und zur Joinsyntax finden Sie unter FROM (Transact-SQL).
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 }
Hinweis
Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.
Argumente
LOOP | HASH | MERGE
Legt fest, dass der Join in der Abfrage Schleifen, Hashing oder Zusammenführen verwenden soll. Durch die Verwendung von LOOP | HASH | MERGE JOIN wird ein bestimmter Join zwischen zwei Tabellen erzwungen. LOOP kann nicht zusammen mit RIGHT oder FULL als Jointyp 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 dann verwendet werden, wenn die linke Tabelle weniger Datensätze als die rechte Tabelle enthält.
Ist die rechte Tabelle lokal, wird der Join lokal ausgeführt. Falls beide Tabellen Remotetabellen sind, aber aus verschiedenen Datenquellen stammen, bewirkt REMOTE den Join am Standort der rechten Tabelle. Wenn beide Tabellen Remotetabellen aus der gleichen Datenquelle sind, ist die Angabe von REMOTE nicht notwendig.
REMOTE kann nicht verwendet werden, wenn einer der Werte, die im Joinprädikat verglichen werden, mithilfe der COLLATE-Klausel in eine andere Sortierung umgewandelt wird.
REMOTE kann nur für INNER JOIN-Vorgänge verwendet werden.
Bemerkungen
Joinhinweise werden in der FROM-Klausel einer Abfrage angegeben. Sie erzwingen eine Joinstrategie zwischen zwei Tabellen. Falls ein Joinhinweis für zwei beliebige Tabellen angegeben ist, erzwingt der Abfrageoptimierer automatisch die Joinreihenfolge für alle verknüpften Tabellen der Abfrage abhängig von der Position der ON-Schlüsselwörter. Wird CROSS JOIN ohne die ON-Klausel verwendet, kann die Joinreihenfolge mithilfe von Klammern angegeben werden.
Beispiele
A. Verwenden von HASH
Im folgenden Beispiel wird der JOIN
-Vorgang in der Abfrage durch einen HASH
-Join ausgeführt. In dem Beispiel wird die AdventureWorks2022-Datenbank verwendet.
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. In dem Beispiel wird die AdventureWorks2022-Datenbank verwendet.
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. In dem Beispiel wird die AdventureWorks2022-Datenbank verwendet.
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
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für