Freigeben über


Direkte Ausführung

Die direkte Ausführung ist die grundlegendste Art und Weise, um eine Anweisung auszuführen. Eine Anwendung bildet eine Zeichenfolge, die eine Transact-SQL-Anweisung enthält, und leitet sie mithilfe der SQLExecDirect-Funktion zur Ausführung weiter. Wenn die Anweisung beim Server eingeht, kompiliert SQL Server sie zu einem Ausführungsplan, der unmittelbar ausgeführt wird.

Die direkte Ausführung wird im Allgemeinen von Anwendungen verwendet, die Anweisungen zur Laufzeit erstellen und ausführen. Es ist zugleich die effektivste Methode, Anweisungen, die nur einmal ausgeführt werden, auszuführen. Bei vielen Datenbanken muss jedoch die SQL-Anweisung bei jeder Ausführung analysiert und kompiliert werden, sodass ein zusätzlicher Aufwand entsteht, wenn die Anweisung mehrmals ausgeführt wird.

In SQL Server wurde die Leistung bei der direkten Ausführung von häufig ausgeführten Anweisungen in Mehrbenutzerumgebungen wesentlich verbessert. Durch den Einsatz von SQLExecDirect mit Parametermarkierungen für häufig ausgeführte SQL-Anweisungen wird zudem beinahe die gleiche Effizienz wie bei der vorbereiteten Ausführung erzielt.

Wenn eine Verbindung mit einer Instanz von SQL Server besteht, verwendet der SQL Server Native Client-ODBC-Treiber sp_executesql, um die mit SQLExecDirect angegebene SQL-Anweisung bzw. den Batch zu übermitteln. SQL Server stellt eine Logik bereit, mit der schnell bestimmt werden kann, ob eine mit sp_executesql ausgeführte SQL-Anweisung oder ein Batch mit der Anweisung oder dem Batch übereinstimmt, der bzw. die einen bereits im Arbeitsspeicher vorhandenen Ausführungsplan generiert hat. Wenn eine Übereinstimmung gefunden wird, nutzt SQL Server den vorhandenen Plan, anstatt einen neuen Plan zu kompilieren. Das heißt, dass häufig ausgeführte SQL-Anweisungen, die mit SQLExecDirect in einem System mit vielen Benutzern ausgeführt werden, von den zahlreichen Planwiederverwertungsvorteilen profitieren können, die in vorherigen Versionen von SQL Server nur gespeicherten Prozeduren zur Verfügung standen.

Die Vorteile der erneuten Nutzung von Ausführungsplänen können jedoch nur umgesetzt werden, wenn mehrere Benutzer die gleiche SQL-Anweisungen oder den gleichen Batch ausführen. Befolgen Sie diese Codierungskonventionen, um die Wahrscheinlichkeit zu erhöhen, dass die SQL-Anweisungen, die von unterschiedlichen Clients ausgeführt werden, sich soweit ähneln, dass die Ausführungspläne wiederverwendet werden können:

  • Schließen Sie keine Datenkonstanten in die SQL-Anweisungen ein, verwenden Sie stattdessen an Programmvariablen gebundene Parametermarkierungen. Weitere Informationen finden Sie unter Verwenden von Anweisungsparametern.

  • Verwenden Sie vollqualifizierte Objektnamen. Ausführungspläne werden nicht wiederverwendet, wenn Objektnamen nicht qualifiziert sind.

  • Sorgen Sie dafür, dass Anwendungsverbindungen sofern möglich einen gemeinsamen Satz an Verbindungs- und Anweisungsoptionen verwenden. Ausführungspläne, die für eine Verbindung mit einem Optionssatz (z. B. ANSI_NULLS) generiert werden, werden nicht für Verbindungen mit einem anderen Optionssatz wiederverwendet. Der SQL Server Native Client ODBC-Treiber und der SQL Server Native Client OLE DB-Anbieter haben die gleichen Standardeinstellungen für diese Optionen.

Wenn alle Anweisungen, die mit SQLExecDirect ausgeführt werden, basierend auf diesen Konventionen codiert werden, kann SQL Server die Ausführungspläne bei Gelegenheit wiederverwenden.

Siehe auch

Konzepte

Ausführen von Anweisungen (ODBC)