SET FORCEPLAN (Transact-SQL)

Aktualisiert: 05. Dezember 2005

When FORCEPLAN auf ON festgelegt wird, verarbeitet der Microsoft SQL Server-Abfrageoptimierer eine Verknüpfung in der Reihenfolge, in der die Tabellen in der FROM-Klausel einer Abfrage aufgeführt sind. Darüber hinaus wird durch Festlegen von FORCEPLAN auf ON die Verwendung einer Nested Loops-Verknüpfung erzwungen, sofern nicht andere Verknüpfungstypen zum Erstellen eines Plans für die Abfrage erforderlich sind oder durch Verknüpfungs- bzw. Abfragehinweise angefordert werden.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

SET FORCEPLAN { ON | OFF }

Hinweise

SET FORCEPLAN setzt die Logik außer Kraft, die der Abfrageoptimierer beim Verarbeiten einer Transact-SQL-SELECT-Anweisung verwendet. Die SELECT-Anweisung gibt unabhängig von dieser Einstellung dieselben Daten zurück. Der einzige Unterschied besteht darin, wie SQL Server die Tabellen bei der Ausführung der Abfrage verarbeitet.

Auch Hinweise für den Abfrageoptimierer können in Abfragen verwendet werden, um das Verarbeiten der SELECT-Anweisung durch SQL Server zu beeinflussen.

SET FORCEPLAN wird zur Ausführungszeit und nicht zur Analysezeit angewendet.

Berechtigungen

Die SET FORCEPLAN-Berechtigungen erhalten standardmäßig alle Benutzer.

Beispiele

Im folgenden Beispiel werden vier Tabellen verknüpft. Die SHOWPLAN_TEXT-Einstellung ist aktiviert. Daher gibt SQL Server Informationen dazu zurück, wie die Abfrage anders verarbeitet wird, sobald die SET FORCE_PLAN-Einstellung aktiviert wird.

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

Siehe auch

Verweis

SELECT (Transact-SQL)
SET (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

05. Dezember 2005

Neuer Inhalt:
  • Formulierung der Einleitung angepasst und das Erzwingen einer Nested Loops-Verknüpfung hinzugefügt.