Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de données SQL dans Microsoft Fabric
Lorsque FORCEPLAN la requête est réglée sur ON, l’optimiseur de requêtes SQL Server traite une jointure dans le même ordre que les tables apparaissant dans la clause FROM d’une requête. De plus, le réglage FORCEPLAN sur ON force l’utilisation d’une jointure en boucle imbriquée, sauf si d’autres types de jointures ne sont nécessaires pour construire un plan pour la requête, ou qu’elles soient demandées avec des indices de jointure ou de requête.
Conventions de la syntaxe Transact-SQL
Syntaxe
SET FORCEPLAN { ON | OFF }
Notes
SET FORCEPLAN en gros, il outrepasse la logique utilisée par l’optimiseur de requêtes 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.
SET FORCEPLAN est appliqué à l’exécution ou à l’exécution et non à l’analyse.
Autorisations
SET FORCEPLAN Les permissions par défaut sont pour tous les utilisateurs.
Exemples
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 AdventureWorks2022;
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
Voir aussi
SELECT (Transact-SQL)
SET Instructions (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)