Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Gdy FORCEPLAN jest ustawiony na ON, optymalizator zapytań SQL Server przetwarza połączenie w tej samej kolejności, w jakiej tabele pojawiają się w klauzuli FROM zapytania. Dodatkowo, ustawienie FORCEPLAN na ON wymusza użycie zagnieżdżonego łączenia pętli, chyba że potrzebne są inne typy połączeń do stworzenia planu zapytania lub są one wymagane za pomocą wskazówek łączących lub zapytań.
Transact-SQL konwencje składni
Składnia
SET FORCEPLAN { ON | OFF }
Uwagi
SET FORCEPLAN zasadniczo nadpisuje logikę używaną przez optymalizator zapytań do przetwarzania instrukcji Transact-SQL SELECT. Dane zwracane przez polecenie SELECT są takie same niezależnie od tego ustawienia. Jedyną różnicą jest sposób, w jaki SQL Server przetwarza tabele, aby spełnić zapytanie.
Wskazówki optymalizatora zapytań mogą być również używane w zapytaniach, aby wpływać na sposób przetwarzania instrukcji SELECT przez SQL Server.
SET FORCEPLAN jest stosowany podczas wykonywania lub działania, a nie podczas parse.
Permissions
USTAW FORCEPLAN domyślnie uprawnień dla wszystkich użytkowników.
Przykłady
Poniższy przykład wykonuje łączenie czterech tabel. Ustawienie jest SHOWPLAN_TEXT włączone, więc SQL Server zwraca informacje o tym, jak inaczej przetwarza zapytanie po włączeniu tego SET FORCE_PLAN ustawienia.
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
Zobacz też
WYBIERZ (Transact-SQL)
INSTRUKCJE SET (Transact-SQL)
ZESTAW SHOWPLAN_ALL (Transact-SQL)
ZESTAW SHOWPLAN_TEXT (Transact-SQL)