Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-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
REPLICATEvagyINNERillesztéssel használja aLEFT, a szórásos áthelyezési művelet az illesztés jobb oldalát replikálja az összes csomópontra. - Hasonlóképpen, ha
REPLICATEhasznál egyRIGHTillesztéssel, a szórásos áthelyezési művelet az illesztés bal oldalát replikálja az összes csomópontra. - Ha
REPLICATEFULLilleszté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