Freigeben über


Grundlegendes zum Erzwingen von Plänen

Aktualisiert: 15. September 2007

SQL Server 2005 führt den USE PLAN-Abfragehinweis ein. USE PLAN kann verwendet werden, um den Abfrageoptimierer zu zwingen, einen bestimmten Abfrageplan für eine Abfrage zu verwenden. Die Funktionsweise des USE PLAN-Abfragehinweises besteht im Annehmen des Abfrageplanes, den Sie im XML-Format als Argument verwenden möchten. USE PLAN kann für Abfragen verwendet werden, deren Pläne zu langsamen Abfragezeiten führen und für die das Vorhandensein besserer Pläne bekannt ist. Ein häufiges Szenario bezieht sich auf Abfragen, die in einer früheren Version von SQL Server zufrieden stellend ausgeführt wurden, in einer aktualisierten Version (Service Pack oder vollständige Versionsaktualisierung) jedoch Leistungseinbußen aufweisen. In den meisten Fällen führt eine Aktualisierung zu einer gleichen oder besseren Leistung hinsichtlich der Ausführungszeiten der meisten Abfragen; es können jedoch auch Ausnahmen auftreten. Der USE PLAN-Abfragehinweis steht für die Behandlung der Fälle zur Verfügung, in denen ein Abfrageplan, der vom Abfrageoptimierer in einer früheren Produktversion ausgewählt wurde, dem nach der Aktualisierung ausgewählten Plan vorzuziehen ist.

Der USE PLAN-Abfragehinweis kann mit Planhinweislisten verwendet werden, wenn Sie die Problembehandlung einer schlechten Abfrageleistung in bereitgestellten Anwendungen durchführen. Planhinweislisten werden zum Anwenden von Abfragehinweisen auf Abfragen verwendet, wenn Sie die Anwendung nicht direkt ändern möchten oder können. Weitere Informationen zu Planhinweislisten finden Sie unter Optimieren von Abfragen in bereitgestellten Anwendungen mit Planhinweislisten. Ausführlichere Szenarien, die zeigen, wie der USE PLAN-Abfragehinweis in Planhinweislisten verwendet werden kann, finden Sie unter Szenario zum Erzwingen eines Planes: Erstellen einer Planhinweisliste, die den Abfragehinweis USE PLAN verwendet und Szenario zum Erzwingen eines Planes: Erstellen einer Planhinweisliste zum Erzwingen eines Planes, der aus einer umgeschriebenen Abfrage abgerufen wird.

Das Erzwingen von Plänen kann für die meisten Typen von SELECT-Abfragen verwendet werden. Dazu zählen z. B. Abfragen von Tabellen, gruppierten und nicht gruppierten Indizes, indizierten Sichten und partitionierten Tabellen und Indizes. USE PLAN kann nicht für INSERT-, UPDATE- oder DELETE-Anweisungen angegeben werden.

Mit dem USE PLAN-Abfragehinweis generierte Abfragepläne werden genau wie andere Abfragepläne zwischengespeichert.

Einschränkungen des Erzwingens von Plänen

Das Erzwingen eines Planes schränkt eine Abfrage auf einen einzigen, statischen Ausführungsplan ein. Durch das Erzwingen eines Planes besteht für den Abfrageoptimierer keine Möglichkeit, Anpassungen an sich ändernde Datengrößen und -verteilungen, neue Indizes und andere Variablen vorzunehmen. Bei falscher Verwendung kann das Erzwingen eines Planes zu Leistungsproblemen führen. Das Erzwingen eines Planes sollte erst verwendet werden, nachdem andere Optionen zum Optimieren der Abfrageleistung vollständig untersucht wurden, z. B. das Verwenden aktueller, neuer Statistiken und optimierter Indizes. Das Erzwingen eines Planes sollte nur selten verwendet und ausschließlich durch erfahrene Datenbankadministratoren und -entwickler vorgenommen werden, die Kenntnisse zu Leistungsfragen und der sich ändernden Umgebung ihrer Datenbank und Anwendungen besitzen.

Wenn Sie den USE PLAN-Abfragehinweis zum Beeinflussen der Kompilierung einer Abfrage in einer bereitgestellten Anwendung verwenden, sollte dieser Hinweis in einer Planhinweisliste verwendet und nicht direkt in die Anwendung eingebettet werden. Durch diese Vorgehensweise können Sie die folgenden Fallstricke vermeiden:

  • Sie können den Hinweis ändern oder entfernen, ohne die Anwendung ändern oder erneut kompilieren zu müssen. In seltenen Fällen kann ein USE PLAN-Hinweis, der in einer Version von SQL Server gültig war, in einem zukünftigen Service Pack oder in einer zukünftigen Version nicht mehr gültig sein. Aus diesem Grund kann es erforderlich sein, einen USE PLAN-Hinweis zu ändern oder zu entfernen, nachdem eine Anwendung bereitgestellt wurde.
  • Das direkte Verwenden eines großen Hinweises in einer Abfrage kann vermieden werden. Dies vereinfacht das Lesen der Abfrage.
    ms186343.note(de-de,SQL.90).gifWichtig:
    Wenn Sie eine Planhinweisliste erstellen, der USE PLAN verwendet, sollten Sie während des Testens überprüfen, ob die Abfrage, deren Plan erzwungen werden soll, in der Regel mit einer Cursoranforderung übermittelt wird. Abfragepläne für cursorbasierte Abfragen unterscheiden sich von Abfrageplänen für Nichtcursorabfragen. Daher muss beim Erstellen einer Planhinweisliste, die einen USE PLAN-Hinweis angibt, der für eine mit einer Cursoranforderung übermittelte Abfrage gilt, die Planhinweisliste einen Cursorplan angeben. Weitere Informationen finden Sie unter Verwenden des USE PLAN-Abfragehinweises für Abfragen mit Cursorn.

Das Erzwingen eines Planes wird für die folgenden Arten von Abfragen in SQL Server 2005 nicht unterstützt:

Siehe auch

Konzepte

Angeben von Abfrageplänen mit Planerzwingung

Andere Ressourcen

Abfrageleistung

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

15. September 2007

Geänderter Inhalt:
  • Die fehlerhafte Aussage, dass mit USE PLAN generierte Abfragepläne nicht zwischengespeichert werden, wenn das resultierende Zeichenfolgenliteral länger als 8 KB ist, wurde korrigiert.