Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
När FORCEPLAN är inställd på ON bearbetar SQL Server-frågeoptimeraren en join i samma ordning som tabellerna förekommer i FROM-klausulen i en fråga. Dessutom tvingar inställningen av FORCEPLAN till ON användning av en nästlad loop-join, om inte andra typer av joins krävs för att konstruera en plan för frågan, eller om de begärs med join-hints eller frågeledtrådar.
Transact-SQL syntaxkonventioner
Syntax
SET FORCEPLAN { ON | OFF }
Anmärkningar
SET FORCEPLAN åsidosätter i princip logiken som används av frågeoptimeraren för att bearbeta ett uttalande Transact-SQL SELECT. Datan som returneras av SELECT-satsen är densamma oavsett denna inställning. Den enda skillnaden är hur SQL Server bearbetar tabellerna för att uppfylla frågan.
Frågeoptimerartips kan också användas i frågor för att påverka hur SQL Server bearbetar SELECT-satsen.
SET FORCEPLAN tillämpas vid exekverings- eller körningstid och inte vid parsetid.
Permissions
SÄTT FORCEPLAN-behörigheter som standard till alla användare.
Examples
Följande exempel utför en sammanfogning av fyra tabeller. Inställningen SHOWPLAN_TEXT är aktiverad, så SQL Server returnerar information om hur den behandlar frågan annorlunda efter att inställningen SET FORCE_PLAN är aktiverad.
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
Se även
SELECT (Transact-SQL)
SET-instruktioner (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
STÄLL SHOWPLAN_TEXT (Transact-SQL)