Share via


Informationen zur Funktion für fehlende Indizes

Die Funktion für fehlende Indizes verwendet dynamische Verwaltungsobjekte und einen Showplan, um Informationen über fehlende Indizes bereitzustellen, die die SQL Server-Abfrageleistung verbessern können.

Komponenten

Wenn der Abfrageoptimierer einen Abfrageplan generiert, analysiert er, welche Indizes für eine bestimmte Filterbedingung am besten geeignet sind. Wenn keine Indizes vorhanden sind, die sich am besten eignen, generiert der Abfrageoptimierer einen nicht optimalen Abfrageplan, speichert die Informationen zu diesen Indizes jedoch weiterhin. Die Funktion für fehlende Indizes ermöglicht den Zugriff auf diese Indexinformationen, sodass Sie entscheiden können, ob sie implementiert werden sollen.

Die Funktion für fehlende Indizes setzt sich aus den folgenden Komponenten zusammen:

  • Eine Gruppe dynamischer Verwaltungsobjekte, die für Informationen über fehlende Indizes abgefragt werden können.

  • Das MissingIndexes-Element in einem XML-Showplan, der die Indizes korreliert, die der Abfrageoptimierer in den Abfragen als fehlend betrachtet.

Die Komponenten der Funktion für fehlende Indizes werden in den folgenden Abschnitten ausführlich besprochen.

Dynamische Verwaltungsobjekte

Nach dem Ausführen einer typischen Arbeitsauslastung in SQL Server können Sie Informationen über fehlende Indizes abrufen, indem Sie die in der folgenden Tabelle aufgeführten dynamischen Verwaltungsobjekte abfragen. Diese dynamischen Verwaltungsobjekte werden in der master-Datenbank gespeichert.

Dynamisches Verwaltungsobjekt

Zurückgegebene Informationen

sys.dm_db_missing_index_group_stats (Transact-SQL)

Gibt zusammengefasste Informationen über fehlende Indexgruppen zurück, wie z. B. Leistungsverbesserungen, die durch Implementieren einer bestimmten Gruppe fehlender Indizes erzielt werden können.

sys.dm_db_missing_index_groups (Transact-SQL)

Gibt Informationen über eine bestimmte Gruppe fehlender Indizes zurück, wie z. B. der Gruppenbezeichner und die Bezeichner aller fehlenden Indizes dieser Gruppe.

sys.dm_db_missing_index_details (Transact-SQL)

Gibt detaillierte Informationen über einen fehlenden Index zurück, z. B. der Name und Bezeichner der Tabelle, in der der Index fehlt, sowie die Spalten und Spaltentypen, die den fehlenden Index bilden.

sys.dm_db_missing_index_columns (Transact-SQL)

Gibt Informationen über die in einem Index fehlenden Datenbank-Tabellenspalten zurück.

Sie können die von diesen dynamischen Verwaltungsobjekten zurückgegebenen Informationen mithilfe von Tools oder Skripts abrufen, die auf Basis dieser Informationen CREATE INDEX DDL-Anweisungen zum Implementieren der fehlenden Indizes generieren.

Transaktionskonsistenz

Änderungen, die an einzelnen Zeilen dieser dynamischen Verwaltungsobjekte vorgenommen wurden, sind hinsichtlich der Transaktionen nicht konsistent. Das heißt, wenn eine Abfrage abgebrochen oder für die einschließende Transaktion ein Rollback ausgeführt wird, sind die Zeilen mit den Informationen über die fehlenden Indizes dieser Abfrage weiterhin vorhanden.

Es werden nur vollständige Transaktionen unterstützt. Prüfpunkte und teilweise Rollbacks werden nicht unterstützt.

HinweisHinweis

Ändern sich die Metadaten für eine Tabelle, werden alle Informationen zu fehlenden Indizes für diese Tabelle aus den dynamischen Verwaltungsobjekten gelöscht. Änderungen von Tabellenmetadaten können auftreten, wenn beispielsweise Spalten einer Tabelle hinzugefügt oder aus der Tabelle gelöscht werden oder wenn ein Index für eine Tabellenspalte erstellt wird.

MissingIndexes-Element im XML-Showplan

Sie können das in einem XML-Showplan enthaltene MissingIndexes-Element anzeigen, um die Abfragen mit den fehlenden Indizes, die in den Ergebnissen des dynamischen Verwaltungsobjekts identifiziert wurden, zu korrelieren. Das MissingIndexes-Element wird im folgenden Beispiel veranschaulicht:

<ShowPlanXML…>

 <BatchSequence>

  <Batch>

   <Statements>

    <StmtSimple…>

     <StatementSetOptions… />

      <QueryPlan…>

        <MissingIndexes>

        <MissingIndexGroup Impact="22.8764">

         <MissingIndex Database="[ADVENTUREWORKS2008R2]" Schema="[Person]" Table="[Address]">

          <ColumnGroup Usage="EQUALITY">

           <Column Name="[PostalCode]" ColumnId="4" />

          </ColumnGroup>

          <ColumnGroup Usage="INEQUALITY">

           <Column Name="[ModifiedDate]" ColumnId="5" />

          </ColumnGroup>

          <ColumnGroup Usage="INCLUDE">

           <Column Name="[AddressLine1]" ColumnId="2" />

           <Column Name="[AddressLine2]" ColumnId="3" />

           <Column Name="[StateProvinceID]" ColumnId="1" />

          </ColumnGroup>

         </MissingIndex>

        </MissingIndexGroup>

       </MissingIndexes>

Anhand der im MissingIndexes-Element enthaltenen Informationen können Sie die Indizes bestimmen, die zu einer Leistungsverbesserung der spezifischen Abfrage, die im StmtSimple-Element mit der Transact-SQL-Anweisung beschrieben wird, beitragen können. Anschließend können Sie auf Basis der von diesem Element zurückgegebenen Informationen eine CREATE INDEX DDL-Anweisung schreiben.

Aktivieren und Deaktivieren der Funktion für fehlende Indizes

Die Funktion für fehlende Indizes ist standardmäßig aktiviert. Dabei stehen keine Steuerungen zur Verfügung, um die Funktion zu aktivieren bzw. zu deaktivieren oder um beim Abfragen der dynamischen Verwaltungsobjekte sämtliche zurückgegebene Tabellen zurückzusetzen. Beim Neustart von SQL Server werden alle Informationen über fehlende Indizes gelöscht.

Diese Funktion kann nur deaktiviert werden, wenn eine Instanz von SQL Server mithilfe des Eingabeaufforderungs-Hilfsprogramms mit dem -xsqlservr-Argument gestartet wird. Weitere Informationen finden Sie unter sqlservr (Anwendung).