Udostępnij za pośrednictwem


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.

Topic link iconKonwencje składni języka Transact-SQL

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