Share via


Vorbereiten von SQL-Anweisungen

Das relationale Modul von SQL Server 2005 bietet vollständige Unterstützung für die Vorbereitung von SQL-Anweisungen vor ihrer Ausführung. Wenn eine Anwendung eine SQL-Anweisung mehrfach ausführen muss, kann mithilfe der Datenbank-API Folgendes erreicht werden:

  • Einmaliges Vorbereiten der Anweisung. Mit diesem Schritt wird die SQL-Anweisung zu einem Ausführungsplan kompiliert.
  • Ausführen des vorkompilierten Ausführungsplanes immer dann, wenn die Anweisung ausgeführt werden muss. Auf diese Weise muss die SQL-Anweisung nach der ersten Ausführung nicht jedes Mal erneut kompiliert werden.
    Das Vorbereiten und Ausführen von Anweisungen wird durch API-Funktionen und -Methoden gesteuert. Es ist kein Teil der Transact-SQL-Sprache. Das Vorbereiten/Ausführen-Modell für die Ausführung von SQL-Anweisungen wird von dem SQL Native Client-OLE DB-Anbieter und dem SQL Native Client-ODBC-Treiber unterstützt. Bei einer Vorbereitungsanforderung sendet der Anbieter oder der Treiber die Anweisung zusammen mit der Anforderung zur Vorbereitung der Anweisung an SQL Server. Von SQL Server wird ein Ausführungsplan kompiliert und ein Handle für diesen Plan an den Anbieter oder Treiber zurückgegeben. Bei einer Ausführungsanforderung sendet der Anbieter bzw. Treiber eine Anforderung an den Server, den dem Handle zugeordneten Plan auszuführen.

Vorbereitete Anweisungen können nicht zum Erstellen von temporären Objekten in SQL Server 2005 verwendet werden. Vorbereitete Anweisungen können nicht auf gespeicherte Systemprozeduren verweisen, die temporäre Objekte, wie z. B. temporäre Tabellen, erstellen. Diese Prozeduren müssen direkt ausgeführt werden.

Durch übermäßige Verwendung des Vorbereiten/Ausführen-Modells kann die Leistung beeinträchtigt werden. Wenn eine Anweisung nur ein Mal ausgeführt wird, wird durch eine direkte Ausführung nur ein Netzwerkroundtrip zum Server benötigt. Das Vorbereiten und Ausführen einer SQL-Anweisung, die nur ein Mal ausgeführt wird, erfordert einen zusätzlichen Netzwerkroundtrip: einen Trip zur Vorbereitung und einen Trip zur Ausführung der Anweisung.

Das Vorbereiten einer Anweisung ist effizienter, wenn Parametermarkierungen verwendet werden. Nehmen Sie z. B. an, eine Anwendung soll gelegentlich Produktinformationen aus der AdventureWorks-Beispieldatenbank abrufen. Es gibt zwei Möglichkeiten, wie die Anwendung diese Funktion erfüllen kann.

Die erste Möglichkeit besteht darin, dass die Anwendung für jedes angeforderte Produkt eine eigene Abfrage ausführt:

SELECT * FROM AdventureWorks.Production.Product
WHERE ProductID = 63

Die zweite Möglichkeit umfasst folgende Schritte:

  1. Die Anwendung bereitet eine Anweisung vor, die die Parametermarkierung (?) enthält:

    SELECT * FROM AdventureWorks.Production.Product
    WHERE ProductID = ?
    
  2. Die Anwendung bindet eine Programmvariable an die Parametermarkierung.

  3. Die Anwendung füllt die gebundene Variable mit dem Schlüsselwert und führt die Anweisung aus, sobald die Produktinformationen benötigt werden.

Die zweite Methode ist effizienter, sobald die Anweisung mehr als drei Mal ausgeführt wird.

In SQL Server 2005 bietet das Vorbereiten/Ausführen-Modell aufgrund der Art und Weise, wie SQL Server 2005 Ausführungspläne wiederverwendet, keine erheblichen Leistungsvorteile gegenüber der direkten Ausführung. SQL Server 2005 besitzt effiziente Algorithmen zur Ermittlung von Übereinstimmungen zwischen aktuellen SQL-Anweisungen und Ausführungsplänen, die für vorhergehende Ausführungen derselben SQL-Anweisung generiert wurden. Wenn eine Anwendung eine SQL-Anweisung mit Parametermarkierungen mehrfach ausführt, verwendet SQL Server 2005 den Ausführungsplan der ersten Ausführung für die zweite und alle folgenden Ausführungen erneut (es sei denn, der Plan wird aus dem Prozedurcache entfernt). Das Vorbereiten/Ausführen-Modell bietet jedoch weiterhin die folgenden Vorteile:

  • Das Suchen eines Ausführungsplanes anhand eines identifizierenden Handles ist effizienter als die Algorithmen, die für das Ermitteln einer übereinstimmenden SQL-Anweisung mit vorhandenen Ausführungsplänen verwendet werden.
  • Die Anwendung kann steuern, wann der Ausführungsplan erstellt, und wann er wiederverwendet werden soll.
  • Das Vorbereiten/Ausführen-Modell kann auf andere Datenbanken portiert werden, einschließlich früherer Versionen von SQL Server.

Vorbereiten und Ausführen in früheren Versionen von SQL Server

SQL Server Version 6.5 und früher bieten keine direkte Unterstützung für das Vorbereiten/Ausführen-Modell. Der SQL Server-ODBC-Treiber unterstützt jedoch das Vorbereiten/Ausführen-Modell über gespeicherte Prozeduren:

  • Wenn eine Anwendung die Vorbereitung einer SQL-Anweisung anfordert, bindet der ODBC-Treiber die SQL-Anweisung in eine CREATE PROCEDURE-Anweisung ein und sendet diese an SQL Server.
  • Im Fall einer Ausführungsanforderung fordert der ODBC-Treiber an, dass SQL Server die generierte gespeicherte Prozedur ausführt.

In SQL Server 6.5 und SQL Server 6.0 werden die generierten gespeicherten Prozeduren als temporär gespeicherte Prozeduren in tempdb gespeichert. SQL Server 4.21a und frühere Versionen bieten keine Unterstützung für temporär gespeicherte Prozeduren. Daher generiert der Treiber regulär gespeicherte Prozeduren, die in der aktuellen Datenbank gespeichert werden. Der Microsoft OLE DB-Anbieter für SQL Server und der SQL Server-ODBC-Treiber, die mit SQL Server 2000 zur Verfügung gestellt werden, weisen das zuvor beschriebene Verhalten auf, wenn eine Verbindung mit SQL Server 6.5, 6.0 und 4.21a, hergestellt wird.

Siehe auch

Konzepte

Zwischenspeichern und Wiederverwenden von Ausführungsplänen
Parameter und Wiederverwendung von Ausführungsplänen

Hilfe und Informationen

Informationsquellen für SQL Server 2005