Freigeben über


Direkte Ausführung

Direkte Ausführung ist die einfachste Methode zum Ausführen einer Anweisung. Eine Anwendung erstellt eine Zeichenfolge mit einer Transact-SQL-Anweisung und sendet sie zur Ausführung mithilfe der SQLExecDirect-Funktion . Wenn die Anweisung den Server erreicht, kompiliert SQL Server ihn in einen Ausführungsplan und führt dann sofort den Ausführungsplan aus.

Die direkte Ausführung wird häufig von Anwendungen verwendet, die Anweisungen zur Laufzeit erstellen und ausführen, und ist die effizienteste Methode für Anweisungen, die ein einziges Mal ausgeführt werden. Der Nachteil bei vielen Datenbanken besteht darin, dass die SQL-Anweisung bei jeder Ausführung analysiert und kompiliert werden muss, was mehr Aufwand hinzufügt, wenn die Anweisung mehrmals ausgeführt wird.

SQL Server verbessert die Leistung der direkten Ausführung häufig ausgeführter Anweisungen in Mehrbenutzerumgebungen erheblich und die Verwendung von SQLExecDirect mit Parametermarkierungen für häufig ausgeführte SQL-Anweisungen kann sich der Effizienz der vorbereiteten Ausführung nähern.

Wenn eine Verbindung mit einer Instanz von SQL Server hergestellt wird, verwendet der SQL Server Native Client ODBC-Treiber sp_executesql , um die SQL-Anweisung oder den in SQLExecDirect angegebenen Batch zu übertragen. SQL Server verfügt über eine Logik, um schnell zu ermitteln, ob eine SQL-Anweisung oder ein Batch, die mit sp_executesql ausgeführt wird, mit der Anweisung oder batch übereinstimmt, die einen Ausführungsplan generiert hat, der bereits im Arbeitsspeicher vorhanden ist. Wenn eine Übereinstimmung vorgenommen wird, verwendet SQL Server einfach den vorhandenen Plan wieder, anstatt einen neuen Plan zu kompilieren. Dies bedeutet, dass häufig ausgeführte SQL-Anweisungen, die mit SQLExecDirect in einem System mit vielen Benutzern ausgeführt werden, von vielen der Vorteile der Planwiederverwendung profitieren, die nur für gespeicherte Prozeduren in früheren Versionen von SQL Server verfügbar waren.

Dieser Vorteil der Wiederverwendung von Ausführungsplänen funktioniert nur, wenn mehrere Benutzer dieselbe SQL-Anweisung oder denselben Batch ausführen. Befolgen Sie diese Codierungskonventionen, um die Wahrscheinlichkeit zu erhöhen, dass die von verschiedenen Clients ausgeführten SQL-Anweisungen ähnlich genug sind, um Ausführungspläne wiederzuverwenden:

  • Schließen Sie keine Datenkonstanten in die SQL-Anweisungen ein; Verwenden Sie stattdessen Parametermarkierungen, die an Programmvariablen gebunden sind. Weitere Informationen finden Sie unter Using Statement Parameters.

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

  • Verwenden Sie nach Möglichkeit Anwendungsverbindungen mit einer gemeinsamen Gruppe von Verbindungs- und Anweisungsoptionen. Für eine Verbindung mit einer Reihe von Optionen (z. B. ANSI_NULLS) generierte Ausführungspläne werden für eine Verbindung mit einer anderen Gruppe von Optionen nicht wiederverwendet. Der ODBC-Treiber für SQL Server Native Client und der OLE DB-Anbieter des SQL Server Native Client verfügen beide über die gleichen Standardeinstellungen für diese Optionen.

Wenn alle mit SQLExecDirect ausgeführten Anweisungen mit diesen Konventionen codiert werden, kann SQL Server Ausführungspläne wiederverwenden, wenn die Möglichkeit besteht.

Siehe auch

Ausführen von Anweisungen (ODBC)