Freigeben über


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 FabricSQL-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 JOINErzwingen 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 einem INNER oder LEFT Join verwenden, repliziert der Übertragungsverschiebungsvorgang die rechte Seite der Verknüpfung auf alle Knoten.
  • Ebenso repliziert der Übertragungsverschiebungsvorgang bei verwendung von REPLICATE mit einer RIGHT Verknüpfung die linke Seite der Verknüpfung auf alle Knoten.
  • Wenn Sie REPLICATE mit einer FULL 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 DimProductist und nicht die Verteilungsspalte für FactInternetSalesist.

-- 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