聯結提示 (Transact-SQL)

更新: 2006 年 7 月 17 日

指定查詢最佳化工具強制執行兩份資料表之間的聯結策略。

ms173815.note(zh-tw,SQL.90).gif重要事項:
由於 SQL Server 2005 查詢最佳化工具通常會選取最佳的查詢執行計劃,因此,我們建議資深的開發人員和資料庫管理員,盡量不要使用提示 (包括 <join_hint>)。

適用於:

DELETE

SELECT

UPDATE

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

  • LOOP | HASH | MERGE
    指定查詢中的聯結應該使用迴圈、雜湊或合併。使用 LOOP |HASH | MERGE JOIN 會在兩份資料表之間強制執行特定聯結。您不能同時以 RIGHT 或 FULL 為聯結類型來指定 LOOP。
  • REMOTE
    指定在右資料表上執行聯結作業。當左資料表是本機資料表,右資料表是遠端資料表時,這非常有用。只有在左資料表的資料列數比右資料表少時,才應該使用 REMOTE。

    如果右資料表是本機資料表,就在本機環境執行聯結。如果兩份資料表都在遠端,但來自不同的資料來源,REMOTE 會以右資料表為基礎來執行聯結。如果兩份資料表都是遠端資料表,且來自相同資料來源,就不需要 REMOTE。

    當利用 COLLATE 子句將聯結述詞所比較的其中一個值轉換成不同的定序時,便不能使用 REMOTE。

    REMOTE 只能用於 INNER JOIN 作業。

備註

聯結提示指定在查詢的 FROM 子句中。聯結提示會強制執行兩份資料表之間的聯結策略。如果指定了兩份資料表的聯結提示,查詢最佳化工具會以 ON 關鍵字的位置為基礎,自動強制實施查詢中所有聯結的資料表之聯結順序。當使用不含 ON 子句的 CROSS JOIN 時,您可以用括號來指示聯結順序。

範例

A. 使用 HASH

下列範例指定由 HASH 聯結來執行查詢中的 JOIN 作業。

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

下列範例指定由 LOOP 聯結來執行查詢中的 JOIN 作業。

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

下列範例指定由 MERGE 聯結來執行查詢中的 JOIN 作業。

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

請參閱

參考

提示 (Transact-SQL)

其他資源

瞭解雜湊聯結
認識巢狀迴圈聯結
認識合併聯結
聯結基礎觀念
使用聯結

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 7 月 17 日

新增內容:
  • 加入「範例」一節。