Wskazówki dotyczące sprzężenia (Transact-SQL)
Dotyczy:SQL Server
Azure SQL Database
punkt końcowy analizy SQL w Microsoft Fabric
Instancja zarządzana SQL w Microsoft Fabric
Magazyn w Microsoft Fabric
Baza danych SQL w Microsoft Fabric
Wskazówki sprzężenia określają, że optymalizator zapytań wymusza strategię sprzężenia między dwiema tabelami w programie SQL Server. Aby uzyskać ogólne informacje na temat składni sprzężeń i sprzężeń, zobacz klauzuli FROM oraz JOIN, APPLY, PIVOT.
Ostrożność
Ponieważ optymalizator zapytań programu SQL Server zazwyczaj wybiera najlepszy plan wykonania zapytania, zalecamy, aby wskazówki były używane tylko jako ostateczność dla doświadczonych deweloperów i administratorów baz danych.
Odnosi się do
Transact-SQL konwencje składni
Składnia
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}
Argumenty (w programowaniu)
{ PĘTLA | Skrót skrótu | MERGE }
Dotyczy: Azure SQL Database, Azure SQL Managed Instance, punkt końcowy analizy SQL, baza danych SQL w usłudze Microsoft Fabric, Microsoft Fabric Warehouse
Określa, że sprzężenie w zapytaniu powinno używać pętli, tworzenia skrótów lub scalania. Użycie LOOP
, HASH
lub MERGE JOIN
wymusza określone sprzężenia między dwiema tabelami.
LOOP
nie można określić razem z RIGHT
lub FULL
jako typ sprzężenia. Aby uzyskać więcej informacji, zobacz Joins (Sprzężenia).
ZDALNY
Dotyczy: Azure SQL Database, Azure SQL Managed Instance, punkt końcowy analizy SQL, baza danych SQL w usłudze Microsoft Fabric
Określa, że operacja sprzężenia jest wykonywana w lokacji prawej tabeli. Jest to przydatne, gdy lewa tabela jest tabelą lokalną, a prawa tabela jest tabelą zdalną.
REMOTE
należy używać tylko wtedy, gdy lewa tabela ma mniej wierszy niż prawa tabela.
Jeśli właściwa tabela jest lokalna, sprzężenia są wykonywane lokalnie. Jeśli obie tabele są zdalne, ale z różnych źródeł danych, REMOTE
powoduje wykonanie sprzężenia w lokacji właściwej tabeli. Jeśli obie tabele są tabelami zdalnymi z tego samego źródła danych, REMOTE
nie jest wymagana.
REMOTE
nie można użyć, gdy jedna z wartości porównywanych w predykacie sprzężenia jest rzutowana do innego sortowania przy użyciu klauzuli COLLATE
.
REMOTE
można używać tylko w przypadku operacji INNER JOIN
.
ZMNIEJSZYĆ
Dotyczy: Azure Synapse Analytics and Analytics Platform System (PDW)
Zmniejsza liczbę wierszy do przeniesienia dla tabeli po prawej stronie sprzężenia w celu zapewnienia zgodności dwóch rozkładów niezgodnych tabel. Wskazówka REDUCE jest również nazywana wskazówką półsprzężenia.
REPLIKOWAĆ
Dotyczy: Azure Synapse Analytics, Analytics Platform System (PDW), Microsoft Fabric Warehouse
Powoduje operację przenoszenia emisji, w której należy replikować określoną tabelę we wszystkich węzłach dystrybucji.
- Przy użyciu
REPLICATE
z sprzężeniamiINNER
lubLEFT
operacja przenoszenia emisji zreplikuje prawą stronę sprzężenia do wszystkich węzłów. - Podobnie podczas korzystania z
REPLICATE
z sprzężeniaRIGHT
operacja przenoszenia emisji zreplikuje lewą stronę sprzężenia do wszystkich węzłów. - W przypadku korzystania z
REPLICATE
z sprzężeniamiFULL
nie można utworzyć szacowanego planu.
REDYSTRYBUCJA [(columns_count)]
Dotyczy: Azure Synapse Analytics and Analytics Platform System (PDW)
Wymusza dystrybucję dwóch źródeł danych na kolumnach określonych w klauzuli JOIN. W przypadku tabeli rozproszonej system platformy analizy (PDW) wykonuje przenoszenie mieszania w pierwszej kolumnie obu tabel W przypadku tabeli replikowanej system platformy analizy (PDW) wykonuje przenoszenie przycinania. Aby zrozumieć te typy przenoszenia, zobacz sekcję "Operacje planu zapytań DMS" w artykule "Understanding Query Plans" (Opis planów zapytań) w dokumentacji produktu Analytics Platform System (PDW). Ta wskazówka może zwiększyć wydajność, gdy plan zapytania korzysta z przenoszenia emisji w celu rozwiązania niezgodnego sprzężenia dystrybucji.
Dotyczy: Microsoft Fabric Warehouse
Wskazówka REDISTRIBUTE
zapewnia dystrybucję dwóch źródeł danych na podstawie kolumn klauzuli JOIN
. Obsługuje wiele warunków sprzężenia określonych przez pierwsze kolumny n w obu tabelach, gdzie n jest argumentem column_count
. Ponowne dystrybuowanie danych optymalizuje wydajność zapytań przez równomierne rozłożenie danych między węzłami podczas pośrednich kroków wykonywania.
Argument (columns_count)
jest obsługiwany tylko w usłudze Microsoft Fabric Warehouse.
Uwagi
Wskazówki sprzężenia są określone w klauzuli FROM
zapytania. Wskazówki sprzężenia wymuszają strategię sprzężenia między dwiema tabelami. Jeśli dla dwóch tabel określono wskazówkę sprzężenia, optymalizator zapytań automatycznie wymusza kolejność sprzężenia dla wszystkich tabel sprzężonych w zapytaniu na podstawie położenia słów kluczowych ON
. Jeśli CROSS JOIN
jest używana bez klauzuli ON
, nawiasy mogą służyć do wskazania kolejności sprzężenia.
Przykłady
Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022
lub AdventureWorksDW2022
, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.
A. Korzystanie z funkcji HASH
Poniższy przykład określa, że operacja JOIN
w zapytaniu jest wykonywana przez sprzężenia 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. Korzystanie z pętli
Poniższy przykład określa, że operacja JOIN
w zapytaniu jest wykonywana przez sprzężenia 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. Korzystanie z funkcji MERGE
Poniższy przykład określa, że operacja JOIN
w zapytaniu jest wykonywana przez sprzężenia 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
D. Przykład wskazówki dotyczącej sprzężenia REDUKCJI
W poniższym przykładzie użyto wskazówki REDUCE
sprzężenia w celu zmiany przetwarzania tabeli pochodnej w zapytaniu. W przypadku korzystania z wskazówki REDUCE
sprzężenia w tym zapytaniu fis.ProductKey
jest projektowana, replikowana i unikatowa, a następnie przyłączona do DimProduct
podczas mieszania DimProduct
w ProductKey
. Wynikowa tabela pochodna jest dystrybuowana 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. Przykład wskazówki dotyczącej sprzężenia REPLIK
W następnym przykładzie pokazano to samo zapytanie co w poprzednim przykładzie, z tą różnicą, że użyto wskazówki REPLICATE
sprzężenia zamiast wskazówki REDUCE
sprzężenia. Użycie wskazówki REPLICATE
powoduje replikowanie wartości w kolumnie ProductKey
(sprzęganie) z tabeli FactInternetSales
do wszystkich węzłów. Tabela DimProduct
jest przyłączona do replikowanej wersji tych wartości.
-- 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. Użyj wskazówki redystrybucji, aby zagwarantować przenoszenie mieszania dla niezgodnego sprzężenia dystrybucji
Poniższe zapytanie używa wskazówki REDISTRIBUTE
zapytania dotyczącego niezgodnego sprzężenia dystrybucji. Gwarantuje to, że optymalizator zapytań korzysta z przenoszenia mieszania w planie zapytania. Gwarantuje to również, że plan zapytania nie będzie używać przenoszenia emisji, który przenosi tabelę rozproszoną do zreplikowanej tabeli.
W poniższym przykładzie wskazówka REDISTRIBUTE
wymusza przejście shuffle w tabeli FactInternetSales
, ponieważ ProductKey
jest kolumną dystrybucji dla DimProduct
i nie jest kolumną rozkładu dla 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. Użyj argumentu count kolumn z wskazówką REDISTRIBUTE
Poniższe zapytanie używa wskazówek zapytania REDISTRIBUTE
z argumentem liczby kolumn, a przetasowania odbywa się w pierwszych czterech kolumnach każdej tabeli w sprzężeniu.
SELECT * FROM DA
INNER REDISTRIBUTE (4) JOIN DB
ON DA.a1 = DB.b1
Powiązana zawartość
- wskazówki dotyczące (Transact-SQL)