結合ヒント (Transact-SQL)
クエリ オプティマイザで、2 つのテーブル間の結合方法を設定します。
重要 |
---|
通常、SQL Server クエリ オプティマイザでは、クエリにとって最適な実行プランが選択されるため、<join_hint> を含むヒントは、経験を積んだ開発者やデータベース管理者が最後の手段としてのみ使用することをお勧めします。 |
適用対象
構文
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE }
引数
LOOP | HASH | MERGE
クエリ内の結合は、ループ、ハッシュ、またはマージを使用します。LOOP | HASH | MERGE JOIN を使用すると、2 つのテーブル間に特定の結合が設定されます。LOOP は、RIGHT または FULL と共に結合の種類として指定することはできません。REMOTE
右側のテーブルのサイトで結合操作を実行します。これは、左側のテーブルがローカル テーブルで、右側のテーブルがリモート テーブルの場合に効果的です。REMOTE は、左側のテーブルの行数が右側のテーブルの行数よりも少ないときだけ使用します。右側のテーブルがローカルの場合、結合はローカルで実行されます。両方のテーブルがリモート テーブルでデータ ソースは異なる場合、REMOTE の指定によって結合は右側のテーブルのサイトで実行されます。両方のテーブルが同じデータ ソースのリモート テーブルの場合、REMOTE は必要ありません。
結合述語で比較されている値のいずれかを COLLATE 句を使用して別の照合順序にキャストする場合は、REMOTE を使用できません。
REMOTE は、INNER JOIN 操作に対してのみ使用できます。
説明
結合ヒントは、クエリの FROM 句で指定します。結合ヒントにより、2 つのテーブル間の結合方法を設定できます。2 つのテーブルに対して結合ヒントが指定されると、クエリ オプティマイザは、ON キーワードの位置に基づいて、クエリ内のすべての結合テーブルに対して結合の順番を自動的に設定します。ON 句を指定せずに CROSS JOIN を使用する場合は、かっこを使用して結合の順番を指定できます。
例
A. HASH を使用する
次の例では、クエリの JOIN 操作を HASH 結合によって実行することを指定します。
USE AdventureWorks;
GO
SELECT p.Name, pr.ProductReviewID
FROM Production.Product p
LEFT OUTER HASH JOIN Production.ProductReview pr
ON p.ProductID = pr.ProductID
ORDER BY ProductReviewID DESC;
B. LOOP を使用する
次の例では、クエリの JOIN 操作を LOOP 結合によって実行することを指定します。
USE AdventureWorks;
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. MERGE を使用する
次の例では、クエリの JOIN 操作を MERGE 結合によって実行することを指定します。
USE AdventureWorks;
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