ZESTAW FORCEPLAN (Transact-SQL)

Gdy FORCEPLAN jest zestaw na, SQL Server optymalizator kwerendy procesów łączyć w kolejności tabel pojawią się w klauzula FROM kwerendy.Ponadto ustawienie FORCEPLAN ON wymusza użycie zagnieżdżonej pętli łączyć , chyba że inne typy sprzężeń są wymagane do utworzenia planu kwerend lub są żądane podpowiedzi łączyć lub wskazówki kwerendy.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

SET FORCEPLAN { ON | OFF }

Uwagi

Ustawianie FORCEPLAN zasadniczo zastępuje logika używana przez optymalizator kwerendy do przetwarzania Transact-SQL instrukcjaSELECT.Dane zwrócone przez instrukcja SELECT jest taki sam, niezależnie od tego ustawienia.Jedyną różnicą jest sposób, w którym SQL Server procesów tabele, które mają spełniać kwerendy.

Wskazówek dotyczących optymalizacji kwerendy można również w kwerendach wpływać na sposób SQL Server przetwarza instrukcjaSELECT.

Ustaw FORCEPLAN stosowane na wykonać lub czas i nie analizować czas.

Uprawnienia

FORCEPLAN USTAWIĆ uprawnienia domyślne dla wszystkich użytkowników.

Przykłady

W następującym przykładzie wykonywana łączyć tabel cztery.SHOWPLAN_TEXT Ustawienie jest włączone, więc SQL Server zwraca informacje dotyczące sposobu przetwarzania kwerendy inaczej po SET FORCE_PLAN jest włączone ustawienie.

USE AdventureWorks2008R2;
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