Udostępnij za pomocą


USTAW PLAN SIŁY (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza 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)