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