Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Planhinweislisten beeinflussen die Abfrageoptimierung, indem Abfragehinweise oder ein fester Abfrageplan an die Abfragen angefügt werden. Im Planleitfaden geben Sie die SQL-Anweisung an, die optimiert werden soll, sowie eine OPTION-Klausel, die die Abfragehinweise enthält, die Sie verwenden möchten. oder einen spezifischen Abfrageplan, der für die Optimierung der Abfrage verwendet werden soll. Wenn die Abfrage ausgeführt wird, vergleicht der Abfrageoptimierer die Transact-SQL-Anweisung mit der Planhinweisliste und fügt der Abfrage entweder zur Laufzeit die OPTION-Klausel hinzu oder verwendet den angegebenen Abfrageplan.
Ein Planleitfaden wendet auf eine Abfrage entweder einen festen Abfrageplan, Abfragehinweise oder beides an.
Einschränkungen und Beschränkungen
Die Argumente für sp_create_plan_guide müssen in der angezeigten Reihenfolge bereitgestellt werden. Wenn Sie Werte für die Parameter von sp_create_plan_guideangeben, müssen entweder alle oder überhaupt keine Parameternamen explizit angegeben werden. Wird z. B. @name = angegeben, müssen auch @stmt = , @type =, usw. angegeben werden. Ebenso dürfen, wenn @name = nicht angegeben und nur der Parameterwert bereitgestellt wird, die übrigen Parameterwerte ebenfalls nicht angegeben und nur ihre Werte bereitgestellt werden. Argumentnamen dienen nur zu Beschreibungszwecken, zum besseren Verständnis der Syntax. SQL Server überprüft nicht, ob der angegebene Parametername mit dem Namen des Parameters an der Position übereinstimmt, an der der Name verwendet wird.
Sie können mehr als eine Planhinweisliste des Typs OBJECT oder SQL für dieselbe Abfrage und den Batch oder das Modul erstellen. Es kann jedoch zu einem bestimmten Zeitpunkt nur ein Planleitfaden aktiviert sein.
Planhinweislisten vom Typ OBJECT können nicht für einen @module_or_batch-Wert erstellt werden, der auf eine gespeicherte Prozedur, Funktion oder einen DML-Trigger verweist, in der bzw. dem die WITH ENCRYPTION-Klausel angegeben wird oder die bzw. der temporär ist.
Der Versuch, eine Funktion, eine gespeicherte Prozedur oder einen DML-Trigger zu löschen oder zu ändern, auf die bzw. den ein Planhinweis verweist, unabhängig davon, ob er aktiviert oder deaktiviert ist, führt zu einem Fehler. Der Versuch, eine Tabelle zu löschen, für die ein Trigger definiert ist, auf den ein Planhinweis verweist, verursacht ebenfalls einen Fehler.
Berechtigungen
Um eine Planhinweisliste vom Typ OBJECT zu erstellen, benötigen Sie ALTER-Berechtigung für das Objekt, auf das verwiesen wird. Um eine Planhinweisliste vom Typ SQL oder TEMPLATE zu erstellen, benötigen Sie ALTER-Berechtigung für die aktuelle Datenbank.
Planhinweis mit SSMS erstellen
Klicken Sie auf das Pluszeichen, um die Datenbank zu erweitern, in der Sie eine Planhinweisliste erstellen möchten, und klicken Sie dann auf das Pluszeichen, um den Ordner Programmierbarkeit zu erweitern.
Klicken Sie mit der rechten Maustaste auf den Ordner Planhinweislisten und wählen Sie Neue Planhinweisliste … aus.

Geben Sie im Dialogfeld Neue Planhinweisliste im Feld Name den Namen der Planhinweisliste ein.
Geben Sie im Feld Statement die Transact-SQL-Anweisung ein, für die der Planhinweis angewendet werden soll.
Wählen Sie in der Liste Bereichstyp den Entitätstyp aus, mit dem die Transact-SQL-Anweisung angezeigt wird. Hiermit wird der Kontext für den Abgleich der Transact-SQL-Anweisung mit dem Plan Guide angegeben. Mögliche Werte sind OBJECT, SQLund TEMPLATE.
Geben Sie im Feld Bereichsbatch den Batchtext ein, mit dem die Transact-SQL-Anweisung angezeigt wird. Der Batchtext darf keine
USEDatenbank-Anweisung enthalten. Das Feld Bereichsbatch ist nur verfügbar, wenn SQL als Bereichstyp ausgewählt ist. Wenn bei SQL als Bereichstyp im Feld für den Bereichs-Batch nichts eingegeben wird, wird der Wert des Batchtexts auf denselben Wert gesetzt, der im Feld Anweisung steht.Geben Sie in der Liste Name von Bereichsschema den Namen des Schemas ein, in dem sich das Objekt befindet. Das Feld Name von Bereichsschema ist nur verfügbar, wenn Objekt als Bereichstyp ausgewählt ist.
Geben Sie im Feld Name von Bereichsobjekt den Namen der gespeicherten Transact-SQL-Prozedur, der benutzerdefinierten Skalarfunktion, der aus mehreren Anweisungen bestehenden Tabellenwertfunktion oder des DML-Triggers ein, worin die Transact-SQL-Anweisung enthalten ist. Das Feld Name von Bereichsobjekt ist nur verfügbar, wenn Objekt als Bereichstyp ausgewählt ist.
Geben Sie im Feld Parameter den Parameternamen und Datentyp aller Parameter ein, die in die Transact-SQL-Anweisung eingebettet sind.
Parameter sind nur dann anwendbar, wenn eine der folgenden Aussagen zutrifft:
Der Bereichstyp lautet SQL oder TEMPLATE. Bei TEMPLATEdürfen Parameter nicht NULL sein.
Die Transact-SQL-Anweisung wird mithilfe von sp_executesql übermittelt und für den Parameter ein Wert festgelegt, oder Transact-SQL übermittelt eine Anweisung intern, nachdem sie parametrisiert wurde.
Geben Sie im Feld Hinweise die Abfragehinweise oder den Abfrageplan ein, die bzw. der auf die Transact-SQL-Anweisung angewendet werden soll. Geben Sie eine gültige OPTION-Klausel ein, um einen oder mehrere Abfragehinweise festzulegen.
Klicken Sie auf OK.
Erstellen einer Planhinweisliste mit T-SQL
Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.
Klicken Sie in der Standardleiste auf Neue Abfrage.
Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen.
-- creates a plan guide named Guide1 based on a SQL statement EXEC sp_create_plan_guide @name = N'Guide1', @stmt = N'SELECT TOP 1 * FROM Sales.SalesOrderHeader ORDER BY OrderDate DESC', @type = N'SQL', @module_or_batch = NULL, @params = NULL, @hints = N'OPTION (MAXDOP 1)';
Weitere Informationen finden Sie unter sp_create_plan_guide (Transact-SQL).