Join-Hinweise (Transact-SQL)
Gilt für: SQL Server
Azure SQL-Datenbank
Azure SQL verwaltete Instanz SQL Analytics-Endpunkt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric SQL in Microsoft Fabric
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 | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}
Argumente
{ LOOP | HASH | MERGE }
Gilt für: Azure SQL-Datenbank, Azure SQL Managed Instance, SQL Analytics-Endpunkt, SQL-Datenbank in Microsoft Fabric, Microsoft Fabric Warehouse
Legt fest, dass der Join in der Abfrage Schleifen, Hashing oder Zusammenführen verwenden soll.
LOOP
HASH
Verwenden oder MERGE JOIN
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
Gilt für: Azure SQL-Datenbank, Azure SQL Managed Instance, SQL Analytics-Endpunkt, SQL-Datenbank in Microsoft Fabric
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.
REDUCE
Gilt für: Azure Synapse Analytics and Analytics Platform System (PDW)
Reduziert die Anzahl der Zeilen, die für die Tabelle auf der rechten Seite des Joins verschoben werden, um zwei verteilungsinkompatible Tabellen kompatibel zu machen. Der REDUCE-Hinweis wird auch als Semijoinhinweis bezeichnet.
REPLICATE
gilt für: Azure Synapse Analytics, Analytics Platform System (PDW), Microsoft Fabric Warehouse
Bewirkt einen Übertragungsverschiebungsvorgang, bei dem eine bestimmte Tabelle über alle Verteilungsknoten repliziert wird.
- Wenn Sie
REPLICATE
mit einemINNER
oderLEFT
Join verwenden, repliziert der Übertragungsverschiebungsvorgang die rechte Seite der Verknüpfung auf alle Knoten. - Ebenso repliziert der Übertragungsverschiebungsvorgang bei verwendung von
REPLICATE
mit einerRIGHT
Verknüpfung die linke Seite der Verknüpfung auf alle Knoten. - Wenn Sie
REPLICATE
mit einerFULL
Verknüpfung verwenden, kann kein geschätzter Plan erstellt werden.
REDISTRIBUTE [(columns_count)]
Gilt für: Azure Synapse Analytics and Analytics Platform System (PDW)
Erzwingt, dass zwei Datenquellen in Spalten verteilt werden, die in der JOIN-Klausel angegeben sind. Bei einer verteilten Tabelle führt Analytics Platform System (PDW) eine Verschiebung der ersten Spalte beider Tabellen für eine replizierte Tabelle durch, führt das Analytics Platform System (PDW) eine Verschiebung durch. Informationen zu diesen Verschiebungsarten finden Sie im Abschnitt „DMS-Abfrageplanvorgänge“ im Artikel „Informationen zu Abfrageplänen“ in der Parallel Data Warehouse-Produktdokumentation. Mit diesem Hinweis kann die Leistung verbessert werden, wenn beim Abfrageplan eine Übertragungs-Verschiebung verwendet wird, um einen verteilungsinkompatiblen Join zu beseitigen.
Gilt für: Microsoft Fabric Warehouse
Mit dem hinweis REDISTRIBUTE
wird sichergestellt, dass zwei Datenquellen basierend auf JOIN
Klauselspalten verteilt werden. Es behandelt mehrere Verknüpfungsbedingungen, die durch die ersten n Spalten in beiden Tabellen angegeben werden, wobei n das column_count
-Argument ist. Durch das Verteilen von Daten wird die Abfrageleistung optimiert, indem Daten während der Zwischenschritte der Ausführung gleichmäßig über Knoten verteilt werden.
Das (columns_count)
-Argument wird nur in Microsoft Fabric Warehouse unterstützt.
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 Codebeispiele in diesem Artikel verwenden die AdventureWorks2022
- oder AdventureWorksDW2022
Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage 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
D. Beispiel für einen REDUCE-Joinhinweis
Im folgenden Beispiel wird der REDUCE
-Joinhinweis verwendet, um die Verarbeitung der abgeleiteten Tabelle in der Abfrage zu ändern. Wenn in dieser Abfrage der REDUCE
-Joinhinweis verwendet wird, wird fis.ProductKey
projiziert, repliziert und unterscheidbar gemacht und anschließend beim Mischen von DimProduct
in DimProduct
mit ProductKey
verknüpft. Die resultierende abgeleitete Tabelle wird in fis.ProductKey
verteilt.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REDUCE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
E. Beispiel für einen REPLICATE-Joinhinweis
Im folgenden Beispiel wird dieselbe Abfrage wie im vorherigen Beispiel verwendet, jedoch mit der Ausnahme, dass anstelle des REPLICATE
-Joinhinweises ein REDUCE
-Joinhinweis verwendet wird. Wenn der REPLICATE
-Hinweis verwendet wird, werden die Werte in der Verknüpfungsspalte ProductKey
aus der Tabelle FactInternetSales
auf allen Knoten repliziert. Die Tabelle DimProduct
wird mit der replizierten Version dieser Werte verknüpft.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REPLICATE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
F. Verwenden des REDISTRIBUTE-Hinweises zur Gewährleistung einer Verschiebung mit Vermischung für einen verteilungsinkompatiblen Join
In der folgenden Abfrage wird der REDISTRIBUTE
Abfragehinweis für eine inkompatible Verteilungsverkneißung verwendet. Dadurch wird sichergestellt, dass der Abfrageoptimierer im Abfrageplan eine Verschiebung mit Vermischung verwendet. Ferner wird dadurch sichergestellt, dass im Abfrageplan keine Übertragungs-Verschiebung verwendet wird, bei der eine verteilte Tabelle in eine replizierte Tabelle verschoben wird.
Im folgenden Beispiel erzwingt der REDISTRIBUTE
Hinweis eine Shuffle-Bewegung in der FactInternetSales
Tabelle, da ProductKey
die Verteilungsspalte für DimProduct
ist und nicht die Verteilungsspalte für FactInternetSales
ist.
-- Uses AdventureWorks
SELECT dp.ProductKey,
fis.SalesOrderNumber,
fis.TotalProductCost
FROM DimProduct AS dp
INNER REDISTRIBUTE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey;
G. Verwenden des Arguments "Spaltenanzahl" mit dem REDISTRIBUTE-Hinweis
Die folgende Abfrage verwendet den REDISTRIBUTE
Abfragehinweis mit dem Argument "Spaltenanzahl", und das Shuffle findet in den ersten vier Spalten jeder Tabelle in der Verknüpfung statt.
SELECT * FROM DA
INNER REDISTRIBUTE (4) JOIN DB
ON DA.a1 = DB.b1