結合ヒント (Transact-SQL)

クエリ オプティマイザーで、2 つのテーブル間の結合方法を設定します。

重要な注意事項重要

通常、SQL Server クエリ オプティマイザーでは、クエリにとって最適な実行プランが選択されるため、<join_hint> を含むヒントは、経験を積んだ開発者やデータベース管理者が最後の手段としてのみ使用することをお勧めします。

適用対象

DELETE

SELECT

UPDATE

トピック リンク アイコンTransact-SQL 構文表記規則

構文

<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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
GO
DELETE FROM Sales.SalesPersonQuotaHistory 
FROM Sales.SalesPersonQuotaHistory AS spqh
    INNER LOOP JOIN Sales.SalesPerson AS sp
    ON spqh.BusinessEntityID = sp.BusinessEntityID
WHERE sp.SalesYTD > 2500000.00;
GO

C. MERGE を使用する

次の例では、クエリの JOIN 操作を MERGE 結合によって実行することを指定します。

USE AdventureWorks2008R2;
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