Share via


SET FORCEPLAN (Transact-SQL)

更新: 2005 年 12 月 5 日

當 FORCEPLAN 設定為 ON時,Microsoft SQL Server 查詢最佳化工具會依照查詢之 FORM 子句中的資料表順序來處理聯結。此外,除非需要其他類型的聯結來建構查詢計劃,或者聯結提示或查詢提示要求這些聯結類型,否則將 FORCEPLAN 設定為 ON 便可強制使用巢狀迴圈聯結。

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

語法

SET FORCEPLAN { ON | OFF }

備註

基本上,SET FORCEPLAN 會覆寫查詢最佳化工具用來處理 Transact-SQL SELECT 陳述式的邏輯。不論這項設定為何,SELECT 陳述式傳回的資料都相同。唯一不同是 SQL Server 處理資料表來滿足查詢的方式。

查詢也可以利用查詢最佳化工具提示來影響 SQL Server 處理 SELECT 陳述式的方式。

SET FORCEPLAN 是在執行階段進行套用,而不是在剖析階段進行套用。

權限

SET FORCEPLAN 權限預設給所有使用者。

範例

下列範例執行四份資料表的聯結。因為 SHOWPLAN_TEXT 設定已啟用,所以 SQL Server 就會在 SET FORCE_PLAN 設定啟用後,傳回以不同方式處理查詢的相關資訊。

USE AdventureWorks;
GO
-- Make sure FORCEPLAN is set to OFF.
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN OFF;
GO
SET SHOWPLAN_TEXT ON;
GO
-- Example where the query plan is not forced.
SELECT c.LastName, c.FirstName, v.Name
FROM Person.Contact AS c
   INNER JOIN HumanResources.Employee AS e
   ON e.ContactID = c.ContactID
   INNER JOIN Purchasing.PurchaseOrderHeader AS poh
   ON e.EmployeeID = poh.EmployeeID
   INNER JOIN Purchasing.Vendor AS v
   ON poh.VendorID = v.VendorID;
GO
-- SET FORCEPLAN to ON.
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN ON;
GO
SET SHOWPLAN_TEXT ON;
GO
-- Reexecute inner join to see the effect of SET FORCEPLAN ON.
SELECT c.LastName, c.FirstName, v.Name
FROM Person.Contact AS c
   INNER JOIN HumanResources.Employee AS e 
   ON e.ContactID = c.ContactID
   INNER JOIN Purchasing.PurchaseOrderHeader AS poh
   ON e.EmployeeID = poh.EmployeeID
   INNER JOIN Purchasing.Vendor AS v
   ON poh.VendorID = v.VendorID;
GO
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN OFF;
GO

請參閱

參考

SELECT (Transact-SQL)
SET (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2005 年 12 月 5 日

新增內容:
  • 調整簡介的用字,並加入強制使用巢狀迴圈聯結的說明。