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

ESTE TEMA SE APLICA A:síSQL Server (a partir de 2008)síAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Cuando se establece FORCEPLAN en ON, el optimizador de consultas de SQL ServerSQL Server procesa una combinación en el mismo orden en que aparecen las tablas en la cláusula FROM de una consulta.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. Además, si se establece FORCEPLAN en ON, se fuerza el uso de una combinación de bucles anidados, a menos que sea necesario utilizar otros tipos de combinaciones para construir un plan para la consulta o que se soliciten dichas combinaciones con sugerencias de combinación o sugerencias de consulta.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.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax


SET FORCEPLAN { ON | OFF }  

ComentariosRemarks

SET FORCEPLAN básicamente invalida la lógica utilizada por el optimizador de consultas para procesar una instrucción SELECT de Transact-SQLTransact-SQL.SET FORCEPLAN essentially overrides the logic used by the query optimizer to process a Transact-SQLTransact-SQL SELECT statement. Los datos que devuelve la instrucción SELECT son los mismos, independientemente del valor de esta opción.The data returned by the SELECT statement is the same regardless of this setting. La única diferencia es el modo en que SQL ServerSQL Server procesa las tablas para satisfacer la consulta.The only difference is the way in which SQL ServerSQL Server processes the tables to satisfy the query.

Las sugerencias del optimizador de consultas se pueden usar también en las consultas para influir en el modo en que SQL ServerSQL Server procesa la instrucción SELECT.Query optimizer hints can also be used in queries to affect how SQL ServerSQL Server processes the SELECT statement.

SET FORCEPLAN se aplica en tiempo de ejecución y no en tiempo de análisis.SET FORCEPLAN is applied at execute or run time and not at parse time.

PermissionsPermissions

De forma predeterminada, todos los usuarios tienen permisos para ejecutar SET FORCEPLAN.SET FORCEPLAN permissions default to all users.

EjemplosExamples

En el ejemplo siguiente se realiza una combinación de cuatro tablas.The following example performs a join of four tables. La opción SHOWPLAN_TEXT está habilitada, por lo que SQL ServerSQL Server devuelve información sobre cómo va a procesar la consulta de forma distinta cuando se habilite la opción 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  

Vea tambiénSee Also

SELECT (Transact-SQL) SELECT (Transact-SQL)
Instrucciones 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)