Sdílet prostřednictvím


NASTAVTE FORCEPLAN (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Když je FORCEPLAN nastaven na ON, optimalizátor dotazů SQL Server zpracuje join ve stejném pořadí, v jakém se tabulky objevují v klauzuli FROM dotazu. Navíc nastavení FORCEPLAN na ON nutí použití vnořeného loop join, pokud nejsou potřeba jiné typy spojů pro sestavení plánu dotazu, nebo pokud nejsou vyžadovány pomocí join hints či hint dotazu.

Transact-SQL konvence syntaxe

Syntaxe

  
SET FORCEPLAN { ON | OFF }  

Poznámky

SET FORCEPLAN v podstatě přepisuje logiku používanou optimalizátorem dotazů ke zpracování příkazu Transact-SQL SELECT. Data vrácená příkazem SELECT jsou stejná bez ohledu na toto nastavení. Jediný rozdíl je v tom, jak SQL Server zpracovává tabulky tak, aby vyhověl dotazu.

Náznaky optimalizátoru dotazů lze také použít v dotazech k ovlivnění způsobu, jakým SQL Server zpracovává příkaz SELECT.

SET FORCEPLAN se aplikuje při spuštění nebo běhu a nikoli při parse.

Povolení

Nastavení oprávnění FORCEPLAN je výchozí pro všechny uživatele.

Examples

Následující příklad provádí spojení čtyř tabulek. Nastavení SHOWPLAN_TEXT je povolené, takže SQL Server po zapnutí tohoto nastavení vrací informace o tom, jak dotaz zpracovává jinak.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  

Viz také

SELECT (Transact-SQL)
Příkazy SET (Transact-SQL)
NASTAV SHOWPLAN_ALL (Transact-SQL)
NASTAV SHOWPLAN_TEXT (Transact-SQL)