Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Wanneer FORCEPLAN op AAN staat, verwerkt de SQL Server-queryoptimizer een join in dezelfde volgorde als de tabellen in de FROM-clausule van een query. Daarnaast dwingt het instellen van FORCEPLAN op ON het gebruik van een geneste lus-join af, tenzij andere soorten joins nodig zijn om een plan voor de query te maken, of ze worden gevraagd met join-hints of query-hints.
Transact-SQL syntaxis-conventies
Syntaxis
SET FORCEPLAN { ON | OFF }
Opmerkingen
SET FORCEPLAN overschrijft in wezen de logica die door de query-optimizer wordt gebruikt om een Transact-SQL SELECT-instructie te verwerken. De gegevens die door de SELECT-instructie worden teruggegeven, zijn ongeacht deze instelling hetzelfde. Het enige verschil is de manier waarop SQL Server de tabellen verwerkt om aan de query te voldoen.
Query optimizer hints kunnen ook in queries worden gebruikt om te beïnvloeden hoe SQL Server de SELECT-instructie verwerkt.
SET FORCEPLAN wordt toegepast tijdens uitvoeren of uitvoering en niet tijdens parsetijd.
Permissions
STEL FORCEPLAN-rechten standaard in op alle gebruikers.
Voorbeelden
Het volgende voorbeeld voert een join uit van vier tabellen. De SHOWPLAN_TEXT instelling is ingeschakeld, dus SQL Server geeft informatie terug over hoe het de query anders verwerkt nadat de SET FORCE_PLAN instelling is ingeschakeld.
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
Zie ook
SELECT (Transact-SQL)
SET-instructies (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)