Hints voor deelname (Transact-SQL)
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-database in Microsoft Fabric
Joinhints geven aan dat de queryoptimalisatie een joinstrategie afdwingt tussen twee tabellen in SQL Server. Zie FROM-component plus JOIN, APPLY, PIVOTvoor algemene informatie over joins en joinsyntaxis.
Waarschuwing
Omdat de SQL Server-queryoptimalisatie doorgaans het beste uitvoeringsplan voor een query selecteert, raden we u aan om hints alleen te gebruiken als laatste redmiddel door ervaren ontwikkelaars en databasebeheerders.
Van toepassing op
- DELETE (Transact-SQL)
- SELECT (Transact-SQL)
- UPDATE (Transact-SQL)
Transact-SQL syntaxis-conventies
Syntaxis
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}
Argumenten
{ LOOP | HASH | SAMENVOEGEN }
van toepassing op: Azure SQL Database, Azure SQL Managed Instance, SQL Analytics-eindpunt, SQL-database in Microsoft Fabric, Microsoft Fabric Warehouse
Hiermee geeft u op dat de join in de query lus, hashing of samenvoegen moet gebruiken. Met LOOP
, HASH
of MERGE JOIN
wordt een bepaalde join tussen twee tabellen afgedwongen.
LOOP
kan niet samen met RIGHT
of FULL
worden opgegeven als jointype. Zie Joins voor meer informatie.
AFGELEGEN
van toepassing op: Azure SQL Database, Azure SQL Managed Instance, SQL Analytics-eindpunt, SQL-database in Microsoft Fabric
Hiermee geeft u op dat de joinbewerking wordt uitgevoerd op de site van de juiste tabel. Dit is handig wanneer de linkertabel een lokale tabel is en de rechtertabel een externe tabel is.
REMOTE
mag alleen worden gebruikt wanneer de linkertabel minder rijen heeft dan de rechtertabel.
Als de juiste tabel lokaal is, wordt de join lokaal uitgevoerd. Als beide tabellen extern zijn, maar uit verschillende gegevensbronnen, REMOTE
ervoor zorgt dat de join wordt uitgevoerd op de site van de juiste tabel. Als beide tabellen externe tabellen uit dezelfde gegevensbron zijn, is REMOTE
niet vereist.
REMOTE
kan niet worden gebruikt wanneer een van de waarden die in het joinpredicaat worden vergeleken, wordt omgezet in een andere sortering met behulp van de COLLATE
-component.
REMOTE
kan alleen worden gebruikt voor INNER JOIN
bewerkingen.
VERMINDER
van toepassing op: Azure Synapse Analytics and Analytics Platform System (PDW)
Vermindert het aantal rijen dat moet worden verplaatst voor de tabel aan de rechterkant van de join om twee distributiecompatibele tabellen compatibel te maken. De HINT REDUCE wordt ook wel een semi-join-hint genoemd.
REPLICEREN
van toepassing op: Azure Synapse Analytics, Analytics Platform System (PDW), Microsoft Fabric Warehouse
Hiermee wordt een verplaatsingsbewerking voor een uitzending veroorzaakt, waarbij een specifieke tabel wordt gerepliceerd op alle distributieknooppunten.
- Met behulp van
REPLICATE
met eenINNER
ofLEFT
join, repliceert de broadcast-verplaatsingsbewerking de rechterkant van de join naar alle knooppunten. - Op dezelfde manier wordt tijdens het gebruik van
REPLICATE
met eenRIGHT
join, de verplaatsingsbewerking van de uitzending de linkerkant van de join gerepliceerd naar alle knooppunten. - Wanneer u
REPLICATE
gebruikt met eenFULL
join, kan er geen geschatte planning worden gemaakt.
HERDISTRIBUTIE [(columns_count)]
van toepassing op: Azure Synapse Analytics and Analytics Platform System (PDW)
Hiermee worden twee gegevensbronnen gedwongen om te worden gedistribueerd op kolommen die zijn opgegeven in de JOIN-component. Voor een gedistribueerde tabel voert Analytics Platform System (PDW) een willekeurige verplaatsing uit op de eerste kolom van beide tabellen Voor een gerepliceerde tabel voert Analytics Platform System (PDW) een trimverplaatsing uit. Als u deze verplaatsingstypen wilt begrijpen, raadpleegt u de sectie DMS-queryplanbewerkingen in het artikel 'Queryplannen begrijpen' in de productdocumentatie van Analytics Platform System (PDW). Deze hint kan de prestaties verbeteren wanneer het queryplan een broadcast-verplaatsing gebruikt om een distributiecompatibele join op te lossen.
van toepassing op: Microsoft Fabric Warehouse
De REDISTRIBUTE
hint zorgt ervoor dat twee gegevensbronnen worden gedistribueerd op basis van JOIN
componentkolommen. Het verwerkt meerdere joinvoorwaarden, opgegeven door de eerste n kolommen in beide tabellen, waarbij n het argument column_count
is. Het opnieuw distribueren van gegevens optimaliseert de queryprestaties door gegevens gelijkmatig over knooppunten te spreiden tijdens tussenliggende stappen van de uitvoering.
Het argument (columns_count)
wordt alleen ondersteund in Microsoft Fabric Warehouse.
Opmerkingen
Join-hints worden opgegeven in de FROM
component van een query. Join-hints dwingen een joinstrategie af tussen twee tabellen. Als voor twee tabellen een join-hint is opgegeven, dwingt de queryoptimalisatie automatisch de joinvolgorde af voor alle gekoppelde tabellen in de query, op basis van de positie van de ON
trefwoorden. Wanneer een CROSS JOIN
wordt gebruikt zonder de ON
component, kunnen haakjes worden gebruikt om de joinvolgorde aan te geven.
Voorbeelden
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022
of AdventureWorksDW2022
voorbeelddatabase, die u kunt downloaden van de Microsoft SQL Server-voorbeelden en communityprojecten startpagina.
Eén. HASH gebruiken
In het volgende voorbeeld wordt aangegeven dat de JOIN
bewerking in de query wordt uitgevoerd door een HASH
join.
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. LOOP gebruiken
In het volgende voorbeeld wordt aangegeven dat de JOIN
bewerking in de query wordt uitgevoerd door een LOOP
join.
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. SAMENVOEGEN gebruiken
In het volgende voorbeeld wordt aangegeven dat de JOIN
bewerking in de query wordt uitgevoerd door een MERGE
join.
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. Voorbeeld van HINT VOOR REDUCE-join
In het volgende voorbeeld wordt de hint voor REDUCE
join gebruikt om de verwerking van de afgeleide tabel in de query te wijzigen. Wanneer u de hint voor REDUCE
join in deze query gebruikt, wordt de fis.ProductKey
geprojecteerd, gerepliceerd en uniek gemaakt en vervolgens toegevoegd aan DimProduct
tijdens de willekeurige volgorde van DimProduct
op ProductKey
. De resulterende afgeleide tabel wordt gedistribueerd op 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. Voorbeeld van hint voor REPLICEren
In dit volgende voorbeeld ziet u dezelfde query als in het vorige voorbeeld, behalve dat een hint voor REPLICATE
join wordt gebruikt in plaats van de hint voor REDUCE
join. Door het gebruik van de REPLICATE
hint worden de waarden in de kolom ProductKey
(samenvoegen) uit de FactInternetSales
tabel gerepliceerd naar alle knooppunten. De DimProduct
tabel is gekoppeld aan de gerepliceerde versie van deze waarden.
-- 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. Gebruik de hint REDISTRIBUTE om een shuffle-verplaatsing voor een incompatibele distributie te garanderen
De volgende query maakt gebruik van de REDISTRIBUTE
queryhint voor een incompatibele distributie. Dit garandeert dat de queryoptimalisatie gebruikmaakt van een Shuffle-verplaatsing in het queryplan. Dit garandeert ook dat het queryplan geen broadcast-verplaatsing gebruikt, waardoor een gedistribueerde tabel naar een gerepliceerde tabel wordt verplaatst.
In het volgende voorbeeld dwingt de REDISTRIBUTE
hint de verplaatsing van de FactInternetSales
tabel af omdat ProductKey
de distributiekolom voor DimProduct
is en niet de distributiekolom voor FactInternetSales
is.
-- 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. Het argument aantal kolommen gebruiken met de hint REDISTRIBUTE
De volgende query maakt gebruik van de REDISTRIBUTE
queryhint met het argument kolommen tellen en de willekeurige volgorde vindt plaats in de eerste vier kolommen van elke tabel in de join.
SELECT * FROM DA
INNER REDISTRIBUTE (4) JOIN DB
ON DA.a1 = DB.b1