Delen via


Hints voor deelname (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft FabricSQL-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

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, HASHof 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 een INNER of LEFT join, repliceert de broadcast-verplaatsingsbewerking de rechterkant van de join naar alle knooppunten.
  • Op dezelfde manier wordt tijdens het gebruik van REPLICATE met een RIGHT join, de verplaatsingsbewerking van de uitzending de linkerkant van de join gerepliceerd naar alle knooppunten.
  • Wanneer u REPLICATE gebruikt met een FULL 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 DimProductis en niet de distributiekolom voor FactInternetSalesis.

-- 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