Ipuçları (Transact-sql) birleştirme
Birleştirme ipuçları query optimizer, iki tablo arasındaki birleşim strateji zorla belirtin.
Önemli |
---|
Çünkü SQL Serversorgu en iyi duruma getiricisi genellikle en iyi bir sorgu yürütme planını seçer, bu ipuçları, dahil öneririz <join_hint>, son çare deneyimli geliştiriciler tarafından kullanılır ve veritabanı yöneticileri. |
İçin geçerlidir:
Transact-SQL Sözdizim Kuralları
Sözdizimi
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE }
Bağımsız değişkenler
DÖNGÜ | KARMA | BİRLEŞTİRME
Sorgudaki birleşim döngü, karma veya birleştirme kullanması gerektiğini belirtir. DÖNGÜ kullanarak |KARMA | İki tablo arasında belirli bir birleştirme birleştirme birleştirme zorlar. DÖNGÜ, sağ ile birlikte veya tam bir birleştirme türü belirtilemez.UZAK
Birleştirme işlemi sağ Tablo sitesinde gerçekleştirilen belirtir. Sol tablodaki yerel tablo ve sağ tablo uzak tablo olduğunda yararlıdır. Yalnızca sol tablodaki sağ Masa daha az satır olduğunda uzaktan kullanılmalıdır.Sağ tablo yerel birleştirme yerel olarak gerçekleştirilir. Her iki tablo uzak ama farklı veri kaynaklarından, uzaktan birleştirme sağ Tablo sitede gerçekleştirilecek neden olur. Her iki tablonun aynı veri kaynağından uzak tabloları varsa, uzaktan gerekli değildir.
Birleştirme yüklemi karşılaştırılan değerlerden birini collate yan tümcesini kullanarak farklı bir harmanlama artığını uzaktan kullanılamaz.
Uzaktan yalnızca INNER JOIN işlemleri için kullanılabilir.
Açıklamalar
Birleştirme ipuçları bir sorgunun from yan tümcesinde belirtilir. Birleştirme ipuçları, iki tablo arasındaki birleşim stratejisini uygular. İki tablo için bir birleştirme ipucu belirttiyseniz, query optimizer tüm birleştirilmiş iki tablo on anahtar konumunu esas sorgu, birleştirme sırasını otomatik olarak zorlar. ÇAPRAZ birleştirme on yan tümcesi kullanıldığında, ayraç birleştirme sırasını belirtmek için kullanılır.
Örnekler
A.Using :
Aşağıdaki örnek belirtir JOINişlemi tarafından gerçekleştirilir bir HASHüyelik.
USE AdventureWorks2012;
GO
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;
USE AdventureWorks2012;
GO
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.Using :
Aşağıdaki örnek belirtir JOINişlemi tarafından gerçekleştirilir bir LOOPüyelik.
USE AdventureWorks2012;
GO
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
USE AdventureWorks2012;
GO
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.BIRLEŞTIRME kullanma
Aşağıdaki örnek belirtir JOINişlemi tarafından gerçekleştirilir bir MERGEüyelik.
USE AdventureWorks2012;
GO
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
USE AdventureWorks2012;
GO
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