Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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.
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)