SET FORCEPLAN (Transact-SQL)

Data aggiornamento: 5 dicembre 2005

Quando FORCEPLAN è impostato su ON, Query Optimizer di Microsoft SQL Server elabora un join nello stesso ordine delle tabelle nella clausola FROM di una query. L'impostazione di FORCEPLAN su ON determina inoltre l'utilizzo forzato di un nested loop join, a meno che altri tipi di join non siano necessari per la costruzione di un piano per la query o siano richiesti con hint di join o hint per la query.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

SET FORCEPLAN { ON | OFF }

Osservazioni

L'opzione SET FORCEPLAN sostanzialmente sostituisce la logica utilizzata in Query Optimizer per l'elaborazione di un'istruzione SELECT Transact-SQL. I dati restituiti dall'istruzione SELECT sono gli stessi, indipendentemente dall'impostazione. L'unica differenza è la modalità in cui SQL Server elabora le tabelle per soddisfare la query.

È inoltre possibile utilizzare gli hint di Query Optimizer in query che hanno effetto sulla modalità di elaborazione dell'istruzione SELECT in SQL Server.

L'opzione SET FORCEPLAN viene applicata in fase di esecuzione, non in fase di analisi.

Autorizzazioni

Le autorizzazioni per l'opzione SET FORCEPLAN vengono assegnate per impostazione predefinita a tutti gli utenti.

Esempi

Nell'esempio seguente viene eseguito il join di quattro tabelle. L'impostazione dell'opzione SHOWPLAN_TEXT è attivata in modo che SQL Server restituisca le informazioni sulla diversa modalità di elaborazione della query dopo l'attivazione di 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

Vedere anche

Riferimento

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

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

5 dicembre 2005

Nuovo contenuto
  • Riformulazione dell'introduzione e aggiunta di informazioni sull'utilizzo forzato di un nested loop join.