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.
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