Share via


Erstellen einer neuen Planhinweisliste

Sie können in SQL Server 2012 mithilfe von SQL Server Management Studio oder Transact-SQL eine Planhinweisliste erstellen. Planhinweislisten beeinflussen die Abfrageoptimierung, indem Abfragehinweise oder ein fester Abfrageplan an die Abfragen angefügt werden. In der Planhinweisliste geben Sie die Transact-SQL-Anweisung an, die optimiert werden soll, sowie entweder eine OPTION-Klausel mit den zu verwendenden Abfragehinweisen 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.

In diesem Thema

  • Vorbereitungen:

    Einschränkungen

    Sicherheit

  • So erstellen Sie eine Planhinweisliste mit:

    SQL Server Management Studio

    Transact-SQL

Vorbereitungen

Einschrä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_guide angeben, 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 nur jeweils eine Planhinweisliste 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, gespeicherte Prozedur oder einen DML-Trigger zu löschen oder zu ändern, auf die bzw. den eine aktivierte oder deaktivierte Planhinweisliste verweist, führt zu einem Fehler. Auch der Versuch, eine Tabelle mit einem Trigger zu löschen, auf den eine Planhinweisliste verweist, führt zu einem Fehler.

Sicherheit

Berechtigungen

Zum Erstellen einer Planhinweisliste vom Typ OBJECT wird die ALTER-Berechtigung für das Objekt benötigt, auf das verwiesen wird. Zum Erstellen einer Planhinweisliste vom Typ SQL oder TEMPLATE wird die ALTER-Berechtigung für die aktuelle Datenbank benötigt.

Pfeilsymbol, dass mit dem Link "Zurück zum Anfang" verwendet wird[Nach oben]

SQL Server Management Studio

Erstellen einer Planhinweisliste

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

  2. Klicken Sie mit der rechten Maustaste auf den Ordner Planhinweislisten, und wählen Sie Neue Planhinweisliste….

  3. Geben Sie im Dialogfeld Neue Planhinweisliste im Feld Name den Namen der Planhinweisliste ein.

  4. Geben Sie im Feld Anweisung die Transact-SQL-Anweisung ein, auf die die Planhinweisliste angewendet werden soll.

  5. Wählen Sie in der Liste Bereichstyp den Entitätstyp aus, mit dem die Transact-SQL-Anweisung angezeigt wird. Dies gibt den Kontext zum Abgleich der Transact-SQL-Anweisung mit der Planhinweisliste an. Mögliche Werte sind OBJECT, SQL und TEMPLATE.

  6. Geben Sie im Feld Bereichsbatch den Batchtext ein, mit dem die Transact-SQL-Anweisung angezeigt wird. Der Batchtext darf keine USE database-Anweisung enthalten. Das Feld Bereichsbatch ist nur verfügbar, wenn SQL als Bereichstyp ausgewählt ist. Wenn bei Verwendung von SQL als Bereichstyp im Feld Bereichsbatch kein Wert angegeben wird, wird der Wert des Batchtexts auf den gleichen Wert wie im Feld Anweisung festgelegt.

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

  8. Geben Sie im Feld Name von Bereichsobjekt den Namen der gespeicherten Transact-SQL-Prozedur, der benutzerdefinierten Skalarfunktion, der aus mehreren Anweisungen bestehenden Funktion mit Tabellenrückgabe 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.

  9. 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 TEMPLATE dürfen Parameter nicht NULL sein.

    • Die Transact-SQL-Anweisung wird mithilfe von sp_executesql übermittelt und für den Parameter ein Wert festgelegt, oder SQL Server übermittelt eine Anweisung intern, nachdem sie parametrisiert wurde.

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

  11. Klicken Sie auf OK.

Pfeilsymbol, dass mit dem Link "Zurück zum Anfang" verwendet wird[Nach oben]

Transact-SQL

Erstellen einer Planhinweisliste

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Database Engine (Datenbankmodul)-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

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

Pfeilsymbol, dass mit dem Link "Zurück zum Anfang" verwendet wird[Nach oben]