zestaw FORCEPLAN (języka Transact-SQL)
When FORCEPLAN is set to ON, the Microsoft SQL Server query optimizer processes a join in the same order as the tables appear in the FROM clause of a query.Ponadto ustawienie FORCEPLAN ON wymusza użycie łączyć nested loop, chyba że inne typy sprzężeń są wymagane do utworzenia planu dla kwerendy lub żądanie łączyć wskazówek lub wskazówki kwerendy.
SET FORCEPLAN { ON | OFF }
Remarks
zestaw FORCEPLAN zasadniczo zastępuje logiki, używane przez optymalizator kwerendy do przetwarzania Transact-SQL Instrukcja SELECT. Dane zwrócone przez SELECT instrukcja są takie same, niezależnie od tego ustawienia.Jedyna różnica polega na sposobie, w którym SQL Server przetwarza tabele, które mają spełniać kwerendy.
Wskazówek dotyczących optymalizacji kwerendy można używać w kwerendach wpływać na sposób SQL Server przetwarza instrukcja SELECT.
zestaw FORCEPLAN jest stosowana w wykonać lub w czasie wykonywania, a nie w czasie analizowania.
Uprawnienia
zestaw FORCEPLAN uprawnienia domyślne dla wszystkich użytkowników.
Przykłady
W następującym przykładzie wykonywana łączyć z czterech tabel.The SHOWPLAN_TEXT setting is enabled, so SQL Server returns information about how it is processing the query differently after the SET FORCE_PLAN setting is enabled.
USE AdventureWorks;
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 c.LastName, c.FirstName, v.Name
FROM Person.Contact AS c
INNER JOIN HumanResources.Employee AS e
ON e.ContactID = c.ContactID
INNER JOIN Purchasing.PurchaseOrderHeader AS poh
ON e.EmployeeID = poh.EmployeeID
INNER JOIN Purchasing.Vendor AS v
ON poh.VendorID = v.VendorID;
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 c.LastName, c.FirstName, v.Name
FROM Person.Contact AS c
INNER JOIN HumanResources.Employee AS e
ON e.ContactID = c.ContactID
INNER JOIN Purchasing.PurchaseOrderHeader AS poh
ON e.EmployeeID = poh.EmployeeID
INNER JOIN Purchasing.Vendor AS v
ON poh.VendorID = v.VendorID;
GO
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN OFF;
GO