SET FORCEPLAN (Transact-SQL)

Mis à jour : 5 décembre 2005

Lorsque FORCEPLAN a pour valeur ON, l'optimiseur de requête Microsoft SQL Server traite une jointure dans le même ordre que celui où les tables apparaissent dans la clause FROM d'une requête. Qui plus est, la définition de FORCEPLAN à ON force l'utilisation d'une jointure de boucles imbriquées sauf si d'autres types de jointures sont nécessaires pour construire un plan pour la requête ou si elles sont demandées avec des indicateurs de requête ou de jointure.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

SET FORCEPLAN { ON | OFF }

Notes

SET FORCEPLAN a priorité sur la logique utilisée par l'optimiseur pour traiter une instruction Transact-SQL SELECT. Les données renvoyées par l'instruction SELECT sont identiques, que cette option soit ou non utilisée. La seule différence est la façon dont SQL Server traite les tables durant l'exécution de la requête.

Les indicateurs de l'optimiseur de requête peuvent également être utilisés dans les requêtes pour modifier la façon dont SQL Server traite l'instruction SELECT.

L'option SET FORCEPLAN est appliquée lors de l'exécution et non pas au moment de l'analyse.

Autorisations

Les autorisations SET FORCEPLAN sont octroyées par défaut à tous les utilisateurs.

Exemple

L'exemple suivant effectue une jointure de quatre tables. L'option SHOWPLAN_TEXT est activée afin que SQL Server renvoie des informations indiquant comment la requête est traitée différemment après l'activation de 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

Voir aussi

Référence

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

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

5 décembre 2005

Nouveau contenu :
  • L'introduction a été reformulée et il est indiqué qu'il est nécessaire de forcer l'utilisation d'une jointure de boucles imbriquées.