Freigeben über


Übersicht über den Ausführungsplan

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Um Abfragen ausführen zu können, muss die SQL Server-Datenbank-Engine die Anweisung analysieren, um einen effizienten Weg für den Zugriff auf die erforderlichen Daten und deren Verarbeitung zu finden. Diese Analyse wird von einer Komponente verarbeitet, die als „Abfrageoptimierer“ bezeichnet wird. Die Eingaben für den Abfrageoptimierer bestehen aus der Abfrage, dem Datenbankschema (Tabellen- und Indexdefinitionen) und den Datenbankstatistiken. Der Abfrageoptimierer erstellt einen oder mehrere Abfrageausführungspläne, die manchmal als Abfragepläne oder Ausführungspläne bezeichnet werden. Der Abfrageoptimierer wählt einen Abfrageplan mit Hilfe einer Reihe von Heuristiken aus, um ein Gleichgewicht zwischen Kompilierungszeit und Optimalität des Plans herzustellen und so einen guten Abfrageplan zu finden.

Tipp

Weitere Informationen zur Abfrageverarbeitung und den Abfrageausführungsplänen finden Sie in den Abschnitten Optimieren von SELECT-Anweisungen und Zwischenspeichern und Wiederverwenden von Ausführungsplänen des Handbuchs zur Architektur der Abfrageverarbeitung.

Informationen zum Anzeigen von Ausführungsplänen in SQL Server Management Studio und Azure Data Studio finden Sie unter Anzeigen und Speichern von Ausführungsplänen.

Ein Abfrageausführungsplan ist die Definition von:

  • Die Reihenfolge des Zugriffs auf die Quelltabellen.

    In der Regel gibt es viele Abfolgen, in denen der Datenbankserver auf die Basistabellen zugreifen kann, um das Resultset zu erstellen. Wenn eine SELECT-Anweisung z.B. auf drei Tabellen verweist, könnte der Datenbankserver zuerst auf TableA zugreifen, dann die Daten aus TableA verwenden, um die entsprechenden Zeilen aus TableB zu extrahieren, und dann die Daten aus TableB verwenden, um Daten aus TableC zu extrahieren. Die anderen Abfolgen, in denen der Datenbankserver auf die Tabellen zugreifen kann, lauten:
    TableC, TableB, TableAoder
    TableB, TableA, TableCoder
    TableB, TableC, TableAoder
    TableC, TableA, TableB

  • Die Methoden, die verwendet werden, um Daten aus den einzelnen Tabellen zu extrahieren.

    Für den Zugriff auf die Daten in den einzelnen Tabellen gibt es in der Regel unterschiedliche Methoden. Wenn nur wenige Zeilen mit bestimmten Schlüsselwerten erforderlich sind, kann der Datenbankserver einen Index verwenden. Wenn alle Zeilen der Tabelle erforderlich sind, kann der Datenbankserver die Indizes übergehen und einen Tabellenscan ausführen. Wenn alle Zeilen einer Tabelle erforderlich sind, die Tabelle jedoch über einen Index verfügt, dessen Schlüsselspalten in einer ORDER BY-Klausel verwendet werden, kann durch die Durchführung eines Indexscans anstelle eines Tabellenscans ein anderes Resultsets gespeichert werden. Wenn es sich um eine kleine Tabelle handelt, können Tabellenscans die effizienteste Methode für fast alle Zugriffe auf die Tabelle darstellen.

  • Die Methoden, die für Berechnungen und zum Filtern, Aggregieren und Sortieren von Daten aus den einzelnen Tabellen verwendet werden.

    Beim Zugriff auf Daten von Tabellen aus gibt es verschiedene Methoden zum Durchführen von Berechnungen für Daten – z. B. Berechnen von skalaren Werten –, zum Aggregieren und Sortieren von Daten wie im Abfragetext definiert – z. B. bei Verwendung einer GROUP BY- oder ORDER BY-Klausel –, und zum Filtern von Daten – z. B. bei Verwendung einer WHERE- oder HAVING-Klausel.