Megosztás a következőn keresztül:


Illesztés tippek (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Az illesztésekkel kapcsolatos tippek azt adják meg, hogy a lekérdezésoptimalizáló az SQL Server két táblája közötti illesztésstratégiát kényszeríti ki. Az illesztésekkel és az illesztés szintaxisával kapcsolatos általános információkért lásd FROM záradékot, valamint a JOIN, APPLY, PIVOT.

Caution

Mivel az SQL Server lekérdezésoptimalizálója általában a legjobb végrehajtási tervet választja ki egy lekérdezéshez, javasoljuk, hogy a tippeket csak a tapasztalt fejlesztők és adatbázis-rendszergazdák használják végső megoldásként.

A következőkre vonatkozik:

Transact-SQL szintaxis konvenciók

Syntax

<join_hint> ::=
     { LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}

Arguments

{ LOOP | KIVONAT | MERGE }

Vonatkozik a következőkre: Azure SQL Database, Azure SQL Managed Instance, SQL analytics endpoint, SQL database in Microsoft Fabric, Microsoft Fabric Warehouse

Megadja, hogy a lekérdezés illesztésének hurkot, kivonatolást vagy egyesítést kell használnia. A LOOP, HASHvagy MERGE JOIN használatával egy adott illesztés kényszeríthető két tábla között. LOOP nem adható meg RIGHT vagy FULL illesztéstípusként. További információ: Illesztések.

REMOTE

Vonatkozik a következőkre: Azure SQL Database, Azure SQL Managed Instance, SQL analytics endpoint, SQL database in Microsoft Fabric

Megadja, hogy az illesztési művelet a megfelelő tábla helyén legyen végrehajtva. Ez akkor hasznos, ha a bal oldali tábla helyi tábla, a jobb oldali tábla pedig távoli tábla. REMOTE csak akkor szabad használni, ha a bal oldali tábla kevesebb sort tartalmaz, mint a jobb oldali táblázat.

Ha a megfelelő tábla helyi, az illesztés helyileg történik. Ha mindkét tábla távoli, de különböző adatforrásokból származik, REMOTE az illesztés a megfelelő tábla helyén történik. Ha mindkét tábla ugyanabból az adatforrásból származó távoli táblák, REMOTE nincs szükség.

REMOTE nem használható, ha az illesztési predikátumban összehasonlítandó értékek egyike egy másik rendezésbe kerül a COLLATE záradék használatával.

REMOTE csak INNER JOIN műveletekhez használható.

REDUCE

A következőkre vonatkozik: Azure Synapse Analytics and Analytics Platform System (PDW)

Csökkenti az illesztés jobb oldalán lévő táblázathoz áthelyezendő sorok számát, hogy két nem kompatibilis táblázatot kompatibilissé tegyen. A REDUCE tippet félillesztésnek is nevezik.

REPLICATE

A következőkre vonatkozik: Azure Synapse Analytics, Analytics Platform System (PDW), Microsoft Fabric Warehouse

Szórásos áthelyezési műveletet okoz, amely során egy adott tábla replikálódik az összes terjesztési csomóponton.

  • Ha REPLICATE vagy INNER illesztéssel használja a LEFT, a szórásos áthelyezési művelet az illesztés jobb oldalát replikálja az összes csomópontra.
  • Hasonlóképpen, ha REPLICATE használ egy RIGHT illesztéssel, a szórásos áthelyezési művelet az illesztés bal oldalát replikálja az összes csomópontra.
  • Ha REPLICATEFULL illesztéssel használ, nem hozható létre becsült terv.

ÚJRAOSZTÁS [(columns_count)]

A következőkre vonatkozik: Azure Synapse Analytics and Analytics Platform System (PDW)

Két adatforrást kényszerít a JOIN záradékban megadott oszlopokra. Elosztott táblák esetén az Analytics Platform System (PDW) a két tábla első oszlopában végez el egy shuffle áthelyezést A replikált táblák esetében az Analytics Platform System (PDW) vágási áthelyezést hajt végre. Az áthelyezési típusok megismeréséhez tekintse meg a Analytics Platform System (PDW) termékdokumentációjának"A lekérdezéstervek ismertetése" című cikk "DMS-lekérdezésterv-műveletek" című szakaszát. Ez a tipp javíthatja a teljesítményt, ha a lekérdezési terv szórásos áthelyezéssel oldja meg a nem kompatibilis elosztási illesztéseket.

A következőkre vonatkozik: Microsoft Fabric Warehouse

A REDISTRIBUTE tipp biztosítja, hogy két adatforrást osszanak el JOIN záradékoszlopok alapján. A két tábla első n oszlopában megadott több illesztési feltételeket kezeli, ahol n a column_count argumentum. Az adatok újraelosztása optimalizálja a lekérdezési teljesítményt azáltal, hogy egyenletesen osztja el az adatokat a csomópontokon a köztes végrehajtási lépések során.

A (columns_count) argumentum csak a Microsoft Fabric Warehouse-ban támogatott.

Remarks

Az illesztési tippek a lekérdezés FROM záradékában vannak megadva. Az illesztésmutatók két tábla közötti illesztésstratégiát kényszerítenek ki. Ha két tábla illesztési tippje van megadva, a lekérdezésoptimalizáló automatikusan kikényszeríti az illesztési sorrendet a lekérdezés összes csatlakoztatott táblájához a ON kulcsszavak pozíciója alapján. Ha a CROSS JOIN záradék nélkül használ egy ON, zárójelekkel jelezheti az illesztési sorrendet.

Examples

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A. Használj HASH-et

Az alábbi példa azt határozza meg, hogy a lekérdezés JOIN műveletét egy HASH illesztés hajtja végre.

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. Használd a LOOP-ot

Az alábbi példa azt határozza meg, hogy a lekérdezés JOIN műveletét egy LOOP illesztés hajtja végre.

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. Használd a MERGE

Az alábbi példa azt határozza meg, hogy a lekérdezés JOIN műveletét egy MERGE illesztés hajtja végre.

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. A REDUCE illesztés tippje példa

Az alábbi példa a REDUCE illesztés tippet használja a származtatott tábla lekérdezésen belüli feldolgozásának módosításához. Ha a REDUCE illesztő tippet használja ebben a lekérdezésben, a fis.ProductKey kivetíti, replikálja és megkülönbözteti, majd DimProduct csatlakozik a DimProductProductKey. Az eredményként kapott származtatott tábla fis.ProductKeylesz elosztva.

-- 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. PÉLDA a REPLIKÁLÁS illesztés tippre

Ez a következő példa ugyanazt a lekérdezést mutatja be, mint az előző példában, azzal a kivételrel, hogy a REPLICATE illesztés tippje helyett egy REDUCE illesztésmutatót használ. A REPLICATE tipp használata esetén a ProductKey tábla FactInternetSales (illesztés) oszlopában lévő értékek replikálódnak az összes csomópontra. A DimProduct tábla az értékek replikált verziójához csatlakozik.

-- 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. A REDISTRIBUTE tipp használatával garantálhatja a nem kompatibilis elosztási illesztés shuffle áthelyezését

Az alábbi lekérdezés a REDISTRIBUTE lekérdezési tippet használja egy nem kompatibilis elosztási illesztéshez. Ez garantálja, hogy a lekérdezésoptimalizáló shuffle áthelyezést használ a lekérdezési tervben. Ez azt is garantálja, hogy a lekérdezési terv nem fog szórásos áthelyezést használni, amely egy elosztott táblát replikált táblába helyez át.

Az alábbi példában a REDISTRIBUTE tipp arra kényszeríti a FactInternetSales táblát, hogy ProductKey a DimProductterjesztési oszlopa, és nem az FactInternetSalesterjesztési oszlopa.

-- 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. Az oszlopok száma argumentum használata a REDISTRIBUTE tipptel

Az alábbi lekérdezés a REDISTRIBUTE lekérdezési tippet használja az oszlopszám argumentummal, és az illesztés minden tábla első négy oszlopában történik.

SELECT * FROM DA
INNER REDISTRIBUTE (4) JOIN DB
ON DA.a1 = DB.b1