Kopplingstips (Transact-SQL)
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-analysslutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
SQL-databas i Microsoft Fabric
Kopplingstips anger att frågeoptimeraren framtvingar en kopplingsstrategi mellan två tabeller i SQL Server. Allmän information om kopplingar och kopplingssyntax finns i FROM-sats plus JOIN, APPLY, PIVOT.
Försiktighet
Eftersom SQL Server-frågeoptimeraren vanligtvis väljer den bästa körningsplanen för en fråga rekommenderar vi att tips endast används som en sista utväg av erfarna utvecklare och databasadministratörer.
Gäller för
Transact-SQL syntaxkonventioner
Syntax
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}
Argumenten
{ LOOP | HASH | MERGE }
gäller för: Azure SQL Database, Azure SQL Managed Instance, SQL Analytics-slutpunkt, SQL-databas i Microsoft Fabric, Microsoft Fabric Warehouse
Anger att kopplingen i frågan ska använda looping, hashing eller sammanslagning. Om du använder LOOP
, HASH
eller MERGE JOIN
framtvingas en viss koppling mellan två tabeller.
LOOP
kan inte anges tillsammans med RIGHT
eller FULL
som kopplingstyp. Mer information finns i Kopplingar.
AVLÄGSEN
gäller för: Azure SQL Database, Azure SQL Managed Instance, SQL Analytics-slutpunkt, SQL-databas i Microsoft Fabric
Anger att kopplingsåtgärden utförs på platsen för den högra tabellen. Detta är användbart när den vänstra tabellen är en lokal tabell och den högra tabellen är en fjärrtabell.
REMOTE
bör endast användas när den vänstra tabellen har färre rader än den högra tabellen.
Om rätt tabell är lokal utförs kopplingen lokalt. Om båda tabellerna är fjärranslutna men från olika datakällor REMOTE
att kopplingen utförs på platsen för den högra tabellen. Om båda tabellerna är fjärrtabeller från samma datakälla krävs inte REMOTE
.
REMOTE
kan inte användas när ett av värdena som jämförs i kopplingspredikatet omvandlas till en annan sortering med hjälp av COLLATE
-satsen.
REMOTE
kan endast användas för INNER JOIN
åtgärder.
REDUCERA
gäller för: Azure Synapse Analytics and Analytics Platform System (PDW)
Minskar antalet rader som ska flyttas för tabellen till höger om kopplingen för att göra två distributionskompatibla tabeller kompatibla. REDUCE-tipset kallas även för ett tips om halvkoppling.
KOPIERA
gäller för: Azure Synapse Analytics, Analytics Platform System (PDW), Microsoft Fabric Warehouse
Orsakar en sändningsflyttåtgärd, där en specifik tabell replikeras över alla distributionsnoder.
- Med hjälp av
REPLICATE
med enINNER
ellerLEFT
koppling replikeras sändningsflyttningsåtgärden till höger om kopplingen till alla noder. - När du använder
REPLICATE
med enRIGHT
koppling replikerar sändningsflyttningsåtgärden på samma sätt vänster sida av kopplingen till alla noder. - När du använder
REPLICATE
med enFULL
koppling kan en uppskattad plan inte skapas.
REDISTRIBUTE [(columns_count)]
gäller för: Azure Synapse Analytics and Analytics Platform System (PDW)
Tvingar två datakällor att distribueras på kolumner som anges i JOIN-satsen. För en distribuerad tabell utför Analytics Platform System (PDW) en shuffle-flytt på den första kolumnen i båda tabellerna För en replikerad tabell utför Analytics Platform System (PDW) en trimningsflytt. Information om dessa flytttyper finns i avsnittet "DMS Query Plan Operations" i artikeln "Understanding Query Plans" (Förstå frågeplaner) i produktdokumentationen för Analytics Platform System (PDW). Det här tipset kan förbättra prestanda när frågeplanen använder en sändningsflytt för att lösa en distributionskompatibel koppling.
gäller för: Microsoft Fabric Warehouse
Tipset REDISTRIBUTE
säkerställer att två datakällor distribueras baserat på JOIN
-satskolumner. Den hanterar flera kopplingsvillkor, som anges av den första n kolumner i båda tabellerna, där n är argumentet column_count
. Omdistribuering av data optimerar frågeprestanda genom att jämnt sprida data mellan noder under mellanliggande körningssteg.
Argumentet (columns_count)
stöds endast i Microsoft Fabric Warehouse.
Anmärkningar
Kopplingstips anges i FROM
-satsen i en fråga. Kopplingstips framtvingar en kopplingsstrategi mellan två tabeller. Om ett kopplingstips anges för två tabeller framtvingar frågeoptimeraren automatiskt kopplingsordningen för alla anslutna tabeller i frågan, baserat på positionen för nyckelorden ON
. När en CROSS JOIN
används utan ON
-satsen kan parenteser användas för att ange kopplingsordningen.
Exempel
Kodexemplen i den här artikeln använder AdventureWorks2022
- eller AdventureWorksDW2022
-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.
A. Använda HASH
I följande exempel anges att den JOIN
åtgärden i frågan utförs av en HASH
koppling.
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. Använda LOOP
I följande exempel anges att den JOIN
åtgärden i frågan utförs av en LOOP
koppling.
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. Använda MERGE
I följande exempel anges att den JOIN
åtgärden i frågan utförs av en MERGE
koppling.
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. Exempel på REDUCE-kopplingstips
I följande exempel används REDUCE
kopplingstips för att ändra bearbetningen av den härledda tabellen i frågan. När du använder REDUCE
kopplingstipset i den här frågan projiceras, replikeras och görs fis.ProductKey
distinkt och kopplas sedan till DimProduct
under blandning av DimProduct
på ProductKey
. Den resulterande härledda tabellen distribueras på fis.ProductKey
.
-- 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. Exempel på REPLIKERingskopplingstips
I nästa exempel visas samma fråga som i föregående exempel, förutom att en REPLICATE
kopplingstips används i stället för REDUCE
kopplingstips. Användningen av REPLICATE
tips gör att värdena i kolumnen ProductKey
(sammanfoga) från FactInternetSales
-tabellen replikeras till alla noder. Tabellen DimProduct
är kopplad till den replikerade versionen av dessa värden.
-- 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. Använd REDISTRIBUTE-tipset för att garantera en shuffle-flytt för en distributionskompatibel koppling
Följande fråga använder REDISTRIBUTE
frågetips för en distributionskompatibel koppling. Detta garanterar att frågeoptimeraren använder en Shuffle-flytt i frågeplanen. Detta garanterar också att frågeplanen inte använder en Broadcast-flytt, vilket flyttar en distribuerad tabell till en replikerad tabell.
I följande exempel tvingar REDISTRIBUTE
-tipset en Shuffle-flytt på FactInternetSales
-tabellen eftersom ProductKey
är distributionskolumnen för DimProduct
och inte är distributionskolumnen för FactInternetSales
.
-- 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. Använd argumentet för antal kolumner med REDISTRIBUTE-tipset
Följande fråga använder REDISTRIBUTE
frågetips med argumentet antal kolumner och shuffle sker mellan de fyra första kolumnerna i varje tabell i kopplingen.
SELECT * FROM DA
INNER REDISTRIBUTE (4) JOIN DB
ON DA.a1 = DB.b1