Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLKoncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze 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.
Caution
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
- DELETE (Transact-SQL)
- SELECT (Transact-SQL)
- AKTUALIZACE (Transact-SQL)
Syntax
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}
Arguments
{ LOOP | HASH | MERGE }
Platí na: Azure SQL Database, Azure SQL Managed Instance, SQL analytics endpoint, SQL database in 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, HASHnebo 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í.
REMOTE
Platí na: Azure SQL Database, Azure SQL Managed Instance, SQL analytics endpoint, SQL database in 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.
REDUCE
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í.
REPLICATE
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í
REPLICATEsINNERneboLEFTspojení, operace přesunu vysílání replikuje pravou stranu spojení do všech uzlů. - Podobně při použití
REPLICATEsRIGHTspojení bude operace přesunutí vysílání replikovat levou stranu spojení do všech uzlů. - Při použití
REPLICATEsFULLspojení nelze vytvořit odhadovaný plán.
PŘEROZDĚLOVAT [(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.
Remarks
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.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použijte 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žijte LOOP
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žijte 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 DimProducta 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