Hint di join (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Gli hint di join specificano che Query Optimizer deve imporre una strategia di join tra due tabelle in SQL Server. Per informazioni generali sui join e sulla sintassi di join, vedere clausola FROM più JOIN, APPLY, PIVOT.
Attenzione
Poiché Query Optimizer di SQL Server seleziona in genere il piano di esecuzione migliore per una query, gli hint devono essere usati solo se strettamente necessari ed esclusivamente da sviluppatori e amministratori di database esperti.
Si applica a
Convenzioni relative alla sintassi Transact-SQL
Sintassi
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE }
Argomenti
{ LOOP | HASH | MERGE }
Specifica che il join della query deve essere un join ciclico, hash o di merge. L'utilizzo di LOOP
, HASH
o MERGE JOIN
impone un join specifico tra due tabelle. LOOP
non può essere specificato insieme a RIGHT
o FULL
come tipo di join. Per altre informazioni, vedere Join.
REMOTE
Specifica che l'operazione di join viene eseguita nella posizione della tabella di destra. Ciò risulta utile quando la tabella di sinistra è una tabella locale e la tabella di destra è una tabella remota. REMOTE
deve essere utilizzato solo quando la tabella a sinistra contiene meno righe rispetto alla tabella destra.
Se la tabella di destra è locale, il join viene eseguito localmente. Se entrambe le tabelle sono remote ma da origini dati diverse, REMOTE
fa sì che il join venga eseguito nel sito della tabella corretta. Se entrambe le tabelle sono tabelle remote dalla stessa origine dati, REMOTE
non è necessario.
REMOTE
Non può essere usato quando uno dei valori confrontati nel predicato di join viene eseguito il cast a regole di confronto diverse usando la COLLATE
clausola .
REMOTE
può essere usato solo per INNER JOIN
le operazioni.
Osservazioni:
Gli hint di join vengono specificati nella FROM
clausola di una query. e consentono di imporre una strategia di join tra due tabelle. Se viene specificato un hint di join per due tabelle, Query Optimizer applica automaticamente l'ordine di join per tutte le tabelle unite nella query, in base alla posizione delle ON
parole chiave. Quando un oggetto CROSS JOIN
viene utilizzato senza la ON
clausola , è possibile utilizzare le parentesi per indicare l'ordine di join.
Esempi
Gli esempi di codice Transact-SQL in questo articolo utilizzano il database campione AdventureWorks2022
o AdventureWorksDW2022
, che è possibile scaricare dalla home page di Esempi di Microsoft SQL Server e progetti collettivi.
R. Usare HASH
Nell'esempio seguente viene specificato che l'operazione JOIN
nella query viene eseguita da un join HASH
.
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. Usare LOOP
Nell'esempio seguente viene specificato che l'operazione JOIN
nella query viene eseguita da un join LOOP
.
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. Usare MERGE
Nell'esempio seguente viene specificato che l'operazione JOIN
nella query viene eseguita da un join MERGE
.
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