Rady spojení (Transact-SQL)
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
koncový bod analytiky SQL v Microsoft Fabric
Warehouse v Microsoft Fabric
databázi SQL v Microsoft Fabric
Nápovědy pro spojení určují, že optimalizátor dotazů vynucuje strategii spojení mezi dvěma tabulkami v SQL Serveru. Obecné informace o spojení a syntaxi spojení naleznete v tématu KLAUZULE FROM plus JOIN, APPLY, PIVOT.
Upozornění
Vzhledem k tomu, že optimalizátor dotazů SQL Serveru obvykle vybírá nejlepší plán provádění dotazu, doporučujeme, aby se rady používaly pouze jako poslední možnost zkušenými vývojáři a správci databází.
Vztahuje se na
Syntaxe
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}
Argumenty
{ LOOP | HASH | MERGE }
platí pro: Azure SQL Database, Azure SQL Managed Instance, koncový bod analýzy SQL, databáze SQL v Microsoft Fabric, Microsoft Fabric Warehouse
Určuje, že spojení v dotazu by mělo používat smyčky, hashování nebo slučování. Použití LOOP
, HASH
nebo MERGE JOIN
vynucuje konkrétní spojení mezi dvěma tabulkami.
LOOP
nelze zadat společně s RIGHT
nebo FULL
jako typ spojení. Další informace naleznete v tématu Spojení.
VZDÁLENÝ
platí pro: Azure SQL Database, Azure SQL Managed Instance, koncový bod analýzy SQL, databáze SQL v Microsoft Fabric
Určuje, že operace spojení se provádí na webu pravé tabulky. To je užitečné, když je levá tabulka místní a pravá tabulka je vzdálená tabulka.
REMOTE
byste měli použít jenom v případě, že levá tabulka obsahuje méně řádků než pravá tabulka.
Pokud je správná tabulka místní, spojení se provede místně. Pokud jsou obě tabulky vzdálené, ale z různých zdrojů dat, REMOTE
způsobí, že se spojení provede na webu správné tabulky. Pokud obě tabulky jsou vzdálené tabulky ze stejného zdroje dat, REMOTE
není potřeba.
REMOTE
nelze použít, pokud se jedna z hodnot porovnávaných v predikátu spojení přetypuje na jinou kolaci pomocí klauzule COLLATE
.
REMOTE
lze použít pouze pro operace INNER JOIN
.
REDUKOVAT
platí pro: Azure Synapse Analytics a Analytics Platform System (PDW)
Zmenšuje počet řádků, které se mají přesunout pro tabulku na pravé straně spojení, aby byly dvě distribuce nekompatibilní tabulky kompatibilní. Tip REDUCE se také označuje jako tip pro střední spojení.
REPLIKOVAT
platí pro: Azure Synapse Analytics, Analytics Platform System (PDW), Microsoft Fabric Warehouse
Způsobí operaci přesunutí všesměrového vysílání, kdy se konkrétní tabulka replikuje napříč všemi distribučními uzly.
- Použití
REPLICATE
sINNER
neboLEFT
spojení, operace přesunu vysílání replikuje pravou stranu spojení do všech uzlů. - Podobně při použití
REPLICATE
sRIGHT
spojení bude operace přesunutí vysílání replikovat levou stranu spojení do všech uzlů. - Při použití
REPLICATE
sFULL
spojení nelze vytvořit odhadovaný plán.
REDISTRIBUTE [(columns_count)]
platí pro: Azure Synapse Analytics a Analytics Platform System (PDW)
Vynutí rozdělení dvou zdrojů dat do sloupců zadaných v klauzuli JOIN. U distribuované tabulky provádí analytický systém (PDW) přesun na prvním sloupci obou tabulek Pro replikovanou tabulku nástroj Analytics Platform System (PDW) oříznout. Informace o těchto typech přesunů najdete v části "Operace plánu dotazů DMS" v článku "Principy plánů dotazů" v dokumentaci k produktu Analytics Platform System (PDW). Tento tip může zvýšit výkon, když plán dotazu používá přesun vysílání k vyřešení distribuce nekompatibilní spojení.
platí pro: Microsoft Fabric Warehouse
Tip REDISTRIBUTE
zajišťuje distribuci dvou zdrojů dat na základě sloupců klauzule JOIN
. Zpracovává více podmínek spojení určených prvním n sloupců v obou tabulkách, kde n je argument column_count
. Redistribuce dat optimalizuje výkon dotazů rovnoměrným rozložením dat mezi uzly během průběžných kroků provádění.
Argument (columns_count)
je podporován pouze ve službě Microsoft Fabric Warehouse.
Poznámky
Nápovědy pro spojení jsou zadané v klauzuli FROM
dotazu. Rady spojení vynucují strategii spojení mezi dvěma tabulkami. Pokud je pro jakékoli dvě tabulky zadán tip spojení, optimalizátor dotazů automaticky vynucuje pořadí spojení pro všechny spojené tabulky v dotazu na základě pozice ON
klíčových slov. Pokud se CROSS JOIN
použije bez klauzule ON
, lze k označení pořadí spojení použít závorky.
Příklady
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2022
nebo AdventureWorksDW2022
, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použití hodnoty HASH
Následující příklad určuje, že operace JOIN
v dotazu je provedena HASH
spojení.
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. Použití smyčky
Následující příklad určuje, že operace JOIN
v dotazu je provedena LOOP
spojení.
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. Použití funkce MERGE
Následující příklad určuje, že operace JOIN
v dotazu je provedena MERGE
spojení.
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. Příklad nápovědy ke spojení REDUCE
Následující příklad používá nápovědu REDUCE
spojení ke změně zpracování odvozené tabulky v dotazu. Při použití nápovědy REDUCE
spojení v tomto dotazu se fis.ProductKey
promítnou, replikují a zvýrazní a pak připojí k DimProduct
během náhodného prohazování DimProduct
na ProductKey
. Výsledná odvozená tabulka se distribuuje na 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. Příklad nápovědy k replikaci spojení
Tento další příklad ukazuje stejný dotaz jako v předchozím příkladu s tím rozdílem, že místo nápovědy pro spojení REPLICATE
se používá tip REDUCE
spojení. Použití REPLICATE
nápovědy způsobí, že se hodnoty ve sloupci ProductKey
(spojování) z tabulky FactInternetSales
replikují do všech uzlů. Tabulka DimProduct
je připojená k replikované verzi těchto hodnot.
-- 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. Pomocí nápovědy k redistribuci zaručte přesun pro distribuci nekompatibilní spojení.
Následující dotaz používá REDISTRIBUTE
nápovědu dotazu k distribuci nekompatibilního spojení. To zaručuje, že optimalizátor dotazů používá v plánu dotazu přesun shuffle. To také zaručuje, že plán dotazu nebude používat přesun všesměrového vysílání, který přesune distribuovanou tabulku do replikované tabulky.
V následujícím příkladu REDISTRIBUTE
tip vynutí pohyb na FactInternetSales
tabulce, protože ProductKey
je distribuční sloupec pro DimProduct
a není distribučním sloupcem pro 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. Použití argumentu počet sloupců s nápovědou k redistribuci
Následující dotaz používá REDISTRIBUTE
nápovědu dotazu s argumentem počet sloupců a náhodné prohazování probíhá napříč prvními čtyřmi sloupci každé tabulky ve spojení.
SELECT * FROM DA
INNER REDISTRIBUTE (4) JOIN DB
ON DA.a1 = DB.b1