ヒント (Transact-SQL) - JoinHints (Transact-SQL) - Join

適用対象: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

結合ヒントにより、クエリ オプティマイザーで、SQL ServerSQL Server の 2 つのテーブル間の結合方法を設定します。Join hints specify that the query optimizer enforce a join strategy between two tables in SQL ServerSQL Server. 結合および結合の構文に関する一般的な情報については、「FROM (Transact-SQL)」を参照してください。For general information about joins and join syntax, see FROM (Transact-SQL).

注意事項

通常、SQL ServerSQL Server クエリ オプティマイザーでは、クエリにとって最適な実行プランが選択されるため、ヒントは、経験を積んだ開発者やデータベース管理者が最後の手段としてのみ使用することをお勧めします。Because the SQL ServerSQL Server query optimizer typically selects the best execution plan for a query, we recommend that hints be used only as a last resort by experienced developers and database administrators.

適用対象:Applies to:

DELETEDELETE

SELECTSELECT

UPDATEUPDATE

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

  
<join_hint> ::=   
     { LOOP | HASH | MERGE | REMOTE }  

引数Arguments

LOOP | HASH | MERGELOOP | HASH | MERGE
クエリ内の結合は、ループ、ハッシュ、またはマージを使用します。Specifies that the join in the query should use looping, hashing, or merging. LOOP | HASH | MERGE JOIN を使用すると、2 つのテーブル間に特定の結合が設定されます。Using LOOP |HASH | MERGE JOIN enforces a particular join between two tables. LOOP は、RIGHT または FULL と共に結合の種類として指定することはできません。LOOP cannot be specified together with RIGHT or FULL as a join type.

REMOTEREMOTE
右側のテーブルのサイトで結合操作を実行します。Specifies that the join operation is performed on the site of the right table. これは、左側のテーブルがローカル テーブルで、右側のテーブルがリモート テーブルの場合に効果的です。This is useful when the left table is a local table and the right table is a remote table. REMOTE は、左側のテーブルの行数が右側のテーブルの行数よりも少ないときだけ使用します。REMOTE should be used only when the left table has fewer rows than the right table.

右側のテーブルがローカルの場合、結合はローカルで実行されます。If the right table is local, the join is performed locally. 両方のテーブルがリモート テーブルでデータ ソースは異なる場合、REMOTE の指定によって結合は右側のテーブルのサイトで実行されます。If both tables are remote but from different data sources, REMOTE causes the join to be performed on the site of the right table. 両方のテーブルが同じデータ ソースのリモート テーブルの場合、REMOTE は必要ありません。If both tables are remote tables from the same data source, REMOTE is not required.

結合述語で比較されている値のいずれかを COLLATE 句を使用して別の照合順序にキャストする場合は、REMOTE を使用できません。REMOTE cannot be used when one of the values being compared in the join predicate is cast to a different collation using the COLLATE clause.

REMOTE は、INNER JOIN 操作に対してのみ使用できます。REMOTE can be used only for INNER JOIN operations.

RemarksRemarks

結合ヒントは、クエリの FROM 句で指定します。Join hints are specified in the FROM clause of a query. 結合ヒントにより、2 つのテーブル間の結合方法を設定できます。Join hints enforce a join strategy between two tables. 2 つのテーブルに対して結合ヒントが指定されると、クエリ オプティマイザーは、ON キーワードの位置に基づいて、クエリ内のすべての結合テーブルに対して結合の順番を自動的に設定します。If a join hint is specified for any two tables, the query optimizer automatically enforces the join order for all joined tables in the query, based on the position of the ON keywords. ON 句を指定せずに CROSS JOIN を使用する場合は、かっこを使用して結合の順番を指定できます。When a CROSS JOIN is used without the ON clause, parentheses can be used to indicate the join order.

使用例Examples

A.A. HASH を使用するUsing HASH

次の例では、クエリの JOIN 操作を HASH 結合によって実行することを指定します。The following example specifies that the JOIN operation in the query is performed by a HASH join. この例では、AdventureWorks2012AdventureWorks2012 データベースを使用します。The example uses the AdventureWorks2012AdventureWorks2012 database.

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.B. LOOP を使用するUsing LOOP

次の例では、クエリの JOIN 操作を LOOP 結合によって実行することを指定します。The following example specifies that the JOIN operation in the query is performed by a LOOP join. この例では、AdventureWorks2012AdventureWorks2012 データベースを使用します。The example uses the AdventureWorks2012AdventureWorks2012 database.

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.C. MERGE を使用するUsing MERGE

次の例では、クエリの JOIN 操作を MERGE 結合によって実行することを指定します。The following example specifies that the JOIN operation in the query is performed by a MERGE join. この例では、AdventureWorks2012AdventureWorks2012 データベースを使用します。The example uses the AdventureWorks2012AdventureWorks2012 database.

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  

参照See Also

Hints (Transact-SQL)Hints (Transact-SQL)