Einschränkungen der Funktion für fehlende Indizes

Die Funktion für fehlende Indizes weist die folgenden Einschränkungen auf:

  • Es ist nicht dazu gedacht, eine Indizierungskonfiguration zu optimieren.

  • Es kann keine statistischen Informationen zu mehr als 500 fehlenden Indexgruppen sammeln.

  • Es gibt keine Reihenfolge für in einem Index zu verwendende Spalten an.

  • Für Abfragen, die nur Ungleichheitsprädikate enthalten, gibt es weniger genaue Kosteninformationen zurück.

  • Es meldet bei manchen Abfragen nur eingeschlossene Spalten, sodass Indexschlüsselspalten manuell ausgewählt werden müssen.

  • Es gibt nur Rohdateninformationen zu Spalten zurück, bei denen möglicherweise Indizes fehlen.

  • Es schlägt keine gefilterten Indizes vor.

  • Es kann unterschiedliche Kosten für dieselbe fehlende Indexgruppe zurückgeben, die mehrere Male in XML-Showplans angezeigt wird.

  • Es berücksichtigt keine unbedeutenden Abfragepläne.

In den folgenden Abschnitten werden weitere Informationen zu diesen Einschränkungen bereitgestellt.

Optimieren einer Indizierungskonfiguration

Die Funktion für fehlende Indizes ist ein einfaches Tool zum Suchen fehlender Indizes, die die Abfrageleistung deutlich verbessern könnten. Es stellt keine adäquaten Informationen zum Optimieren der Indizierungskonfiguration bereit. Verwenden Sie zu diesem Zweck den Database Engine (Datenbankmodul)-Optimierungsratgeber. Weitere Informationen zum Database Engine (Datenbankmodul)-Optimierungsratgeber finden Sie unter Optimieren des physischen Datenbankentwurfs und Verwandte Abfrageoptimierungsfeatures.

Maximale Anzahl fehlender Indexgruppen

Statistische Informationen werden für maximal 500 fehlende Indexgruppen gesammelt. Wenn dieser Schwellenwert erreicht wird, werden keine weiteren Daten zu fehlenden Indexgruppen gesammelt. Dieser Schwellenwert ist kein optimierbarer Parameter und kann nicht geändert werden.

Sortierreihenfolge für Indexspalten

Die Funktion für fehlende Indizes berücksichtigt nicht die optimale Sortierreihenfolge, wenn es einen Index vorschlägt. Betrachten Sie die folgende Beispielabfrage:

SELECT column_a, column_b
FROM table_1
WHERE column_a < 10000
AND column_b < 10000
ORDER BY column_b, column_a

Die Funktion für fehlende Indizes schlägt möglicherweise einen Index vor und listet möglicherweise column_a vor column_b auf, die bessere Sortierreihenfolge wäre jedoch column_b, column_a, was der Sortierreihenfolge der Abfrage entspricht. Wenn Sie die Anweisung der Datendefinitionssprache (DDL, Data Definition Language) erstellen, um einen fehlenden Index zu implementieren, wählen Sie die optimale Sortierreihenfolge durch Untersuchen der einzelnen Arbeitsauslastungsabfragen aus. Weitere Informationen zum Sortieren von Spalten in CREATE INDEX-Anweisungen basierend auf der von der Funktion für fehlende Indizes empfangenen Ausgabe finden Sie unter Verwenden von fehlenden Indexinformationen zum Schreiben von CREATE INDEX-Anweisungen.

Abfragen, die nur Ungleichheitsprädikate enthalten

Die Funktion für fehlende Indizes verwendet ein vereinfachtes Modell, um Kosteninformationen für Abfragen zu generieren, die nur Ungleichheitsprädikate enthalten. Folglich sind die für diese Abfragen zurückgegebenen Kosteninformationen möglicherweise weniger genau als die Informationen, die für Abfragen zurückgegeben werden, die Gleichheitsprädikate enthalten. Betrachten Sie die folgende Beispielabfrage, die kein Gleichheitsprädikat enthält:

SELECT *
FROM table_1
WHERE column_a > -1
AND column_b > -1

Diese Beispielabfrage enthält nur ein Ungleichheitsprädikat (WHERE column_a > -1 AND column_b > -1). Angenommen, alle Zeilen in table_1 qualifizieren sich für die Prädikate column_a > -1 und column_b > -1. In diesem Fall empfiehlt die Funktion für fehlende Indizes u. U. fälschlicherweise einen Index sowohl für column_a als auch für column_b. In diesem Fall können auch die zugehörigen Auswirkungswerte, die von der dynamischen Verwaltungssicht sys.dm_db_missing_indexes_group_stats gemeldet werden, falsch sein.

Gibt für manche Abfragen nur eingeschlossene Spalten zurück

Manchmal meldet die Funktion nur Spaltenverwendungsinformationen für eingeschlossene Spalten. Die Funktion kann z. B. Spalten für Gleichheit = { }, Spalten für Ungleichheit = { } und eingeschlossene Spalten = {b, c, …} melden. In diesem Fall muss eine der eingeschlossenen Spalten für die Indexschlüsselspalte ausgewählt werden. Verwenden Sie die zurückgegebenen Informationen zu fehlenden Indizes für weitere Abfragen, die von einigen derselben Spalten profitieren, um zu bestimmen, welche der eingeschlossenen Spalten als Indexschlüssel ausgewählt werden sollte.

Gibt nur Rohdateninformationen zurück

Die Funktion für fehlende Indizes gibt Rohdateninformationen zu Spalten zurück, für die möglicherweise Indizes fehlen. Dies bedeutet, dass die zurückgegebenen Informationen möglicherweise eine zusätzliche Verarbeitung erfordern, bevor Sie die Informationen zum Erstellen eines Indexes verwenden können.

Wenn z. B. die betreffende Spalte eine berechnete Spalte ist und die Berechnung nicht deterministisch oder unpräzise ist, erzeugt die CREATE INDEX-Anweisung für diese Spalte einen Fehler. Im Falle einer unpräzisen Berechnung sollte die Spalte zuerst permanent sein, und dann können Sie den Index erstellen.

Gibt unterschiedliche Kosten für die gleiche fehlende Indexgruppe in XML-Showplans zurück

Fehlende Indexgruppen können mehrere Male in XML-Showplans angezeigt werden, wobei jedes Mal, wenn die fehlende Indexgruppe angezeigt wird, andere Kosten gemeldet werden. Dies kann vorkommen, wenn verschiedene Teile einer einzelnen Abfrage unterschiedlich von derselben fehlenden Indexgruppe profitieren.

Betrachten Sie die folgende Beispielabfrage:

SELECT i.CustomerID, c.ModifiedDate, City
FROM NewIndividual i JOIN NewCustomer c ON i.CustomerID = c.CustomerID
                    AND c.CustomerType = 'I'
          JOIN NewCustomerAddress ca ON ca.CustomerID = c.CustomerID
          JOIN NewAddress a ON a.AddressID = ca.AddressID
WHERE i.CustomerID = 16701

In dieser Abfrage erzeugen die zwei verschiedenen Joinbedingungen für die CustomerID-Spalte möglicherweise zwei identische fehlende Indexgruppen, die den gleichen Index für die NewIndividual.CustomerID-Spalte enthalten. In diesem Fall würde die dynamische Verwaltungssicht sys.dm_db_missing_index_groups nur eine Zeile für die fehlende Indexgruppe enthalten. Allerdings würde die fehlende Indexgruppe mehrere Male in der XML-Showplanausgabe mit unterschiedlichen Kosten für die verschiedenen Joinbedingungen angezeigt.