SET FORCEPLAN (Transact-SQL)SET FORCEPLAN (Transact-SQL)

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure noAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Quando FORCEPLAN è impostato su ON, Query Optimizer di SQL ServerSQL Server elabora un join nello stesso ordine delle tabelle nella clausola FROM di una query.When FORCEPLAN is set to ON, the SQL ServerSQL Server query optimizer processes a join in the same order as the tables appear in the FROM clause of a 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.In addition, setting FORCEPLAN to ON forces the use of a nested loop join unless other types of joins are required to construct a plan for the query, or they are requested with join hints or query hints.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

  
SET FORCEPLAN { ON | OFF }  

RemarksRemarks

L'opzione SET FORCEPLAN sostanzialmente sostituisce la logica utilizzata in Query Optimizer per l'elaborazione di un'istruzione SELECT Transact-SQLTransact-SQL.SET FORCEPLAN essentially overrides the logic used by the query optimizer to process a Transact-SQLTransact-SQL SELECT statement. I dati restituiti dall'istruzione SELECT sono gli stessi, indipendentemente dall'impostazione.The data returned by the SELECT statement is the same regardless of this setting. L'unica differenza è la modalità in cui SQL ServerSQL Server elabora le tabelle per soddisfare la query.The only difference is the way in which SQL ServerSQL Server processes the tables to satisfy the query.

È inoltre possibile utilizzare gli hint di Query Optimizer in query che hanno effetto sulla modalità di elaborazione dell'istruzione SELECT in SQL ServerSQL Server.Query optimizer hints can also be used in queries to affect how SQL ServerSQL Server processes the SELECT statement.

L'opzione SET FORCEPLAN viene applicata in fase di esecuzione, non in fase di analisi.SET FORCEPLAN is applied at execute or run time and not at parse time.

AutorizzazioniPermissions

Le autorizzazioni per l'opzione SET FORCEPLAN vengono assegnate per impostazione predefinita a tutti gli utenti.SET FORCEPLAN permissions default to all users.

EsempiExamples

Nell'esempio seguente viene eseguito il join di quattro tabelle.The following example performs a join of four tables. L'impostazione dell'opzione SHOWPLAN_TEXT è abilitata in modo che SQL ServerSQL Server restituisca le informazioni sulla diversa modalità di elaborazione della query dopo l'abilitazione di SET FORCE_PLAN.The SHOWPLAN_TEXT setting is enabled, so SQL ServerSQL Server returns information about how it is processing the query differently after the SET FORCE_PLAN setting is enabled.

USE AdventureWorks2012;  
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 p.LastName, p.FirstName, v.Name  
FROM Person.Person AS p  
   INNER JOIN HumanResources.Employee AS e  
   ON e.BusinessEntityID = p.BusinessEntityID  
   INNER JOIN Purchasing.PurchaseOrderHeader AS poh  
   ON e.BusinessEntityID = poh.EmployeeID  
   INNER JOIN Purchasing.Vendor AS v  
   ON poh.VendorID = v.BusinessEntityID;  
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 p.LastName, p.FirstName, v.Name  
FROM Person.Person AS p  
   INNER JOIN HumanResources.Employee AS e   
   ON e.BusinessEntityID = p.BusinessEntityID  
   INNER JOIN Purchasing.PurchaseOrderHeader AS poh  
   ON e.BusinessEntityID = poh.EmployeeID  
   INNER JOIN Purchasing.Vendor AS v  
   ON poh.VendorID = v.BusinessEntityID;  
GO  
SET SHOWPLAN_TEXT OFF;  
GO  
SET FORCEPLAN OFF;  
GO  

Vedere ancheSee Also

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