다음을 통해 공유


SET FORCEPLAN(Transact-SQL)

FORCEPLAN이 ON으로 설정되어 있으면 MicrosoftSQL Server 쿼리 최적화 프로그램은 쿼리의 FROM 절에 테이블이 나타나는 순서대로 조인을 처리합니다. 또한 FORCEPLAN을 ON으로 설정하면 쿼리 계획을 구성하는 데 다른 유형의 조인이 필요하거나 조인 힌트 또는 쿼리 힌트로 요청되지 않은 경우 중첩 루프 조인이 강제로 사용됩니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

SET FORCEPLAN { ON | OFF }

주의

SET FORCEPLAN 옵션은 기본적으로 쿼리 최적화 프로그램이 Transact-SQL 문을 처리하는 데 사용하는 로직보다 우선 적용됩니다. 이 옵션 설정에 상관 없이 반환되는 데이터는 같습니다. 쿼리를 충족시키기 위해 SQL Server가 테이블을 처리하는 방법에만 차이가 있습니다.

쿼리 최적화 프로그램 참고를 사용해 SQL Server가 SELECT 문을 처리하는 방법을 지정할 수도 있습니다.

SET FORCEPLAN 옵션은 실행 시간 또는 런타임에 설정되며, 구문 분석 시에는 설정되지 않습니다.

사용 권한

SET FORCEPLAN 권한은 기본적으로 모든 사용자로 설정됩니다.

다음 예에서는 테이블 4개의 조인을 수행합니다. 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