Verknüpfungshinweise (Transact-SQL)
Verknüpfungshinweise geben an, dass der Abfrageoptimierer eine Verknüpfungsstrategie zwischen zwei Tabellen erzwingt.
Wichtig |
---|
Da der SQL Server-Abfrageoptimierer in der Regel einen optimalen Ausführungsplan für eine Abfrage auswählt, wird empfohlen, dass nur erfahrene Entwickler und Datenbankadministratoren Verknüpfungshinweise einschließlich <join_hint> verwenden, wenn alle anderen Möglichkeiten sich als unbefriedigend erwiesen haben. |
Betrifft:
Syntax
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE }
Argumente
LOOP | HASH | MERGE
Legt fest, dass die Verknüpfung in der Abfrage Schleifen, Hashing oder Zusammenführen verwenden soll. Durch die Verwendung von LOOP | HASH | MERGE JOIN wird eine bestimmte Verknüpfung zwischen zwei Tabellen erzwungen. LOOP kann nicht zusammen mit RIGHT oder FULL als Verknüpfungstyp angegeben werden.REMOTE
Gibt an, dass der Verknüpfungsvorgang 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 die Verknüpfung lokal ausgeführt. Falls beide Tabellen Remotetabellen sind, aber aus verschiedenen Datenquellen stammen, bewirkt REMOTE die Verknüpfung 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 Verknüpfungsprädikat verglichen werden, mithilfe der COLLATE-Klausel in eine andere Sortierung umgewandelt 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 Verknüpfungsstrategie zwischen zwei Tabellen. Falls ein Verknüpfungshinweis für zwei beliebige Tabellen angegeben ist, erzwingt der Abfrageoptimierer automatisch die Verknüpfungsreihenfolge 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 Verknüpfungsreihenfolge mithilfe von Klammern angegeben werden.
Beispiele
A. Verwenden von HASH
Im folgenden Beispiel wird der JOIN-Vorgang in der Abfrage durch eine HASH-Verknüpfung ausgeführt.
USE AdventureWorks;
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. Verwenden von LOOP
Im folgenden Beispiel wird der JOIN-Vorgang in der Abfrage durch eine LOOP-Verknüpfung ausgeführt.
USE AdventureWorks;
GO
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 eine MERGE-Verknüpfung ausgeführt.
USE AdventureWorks;
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