sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Gilt für: SQL Server 2019 (15.x) Azure SQL-Datenbank Azure SQL verwaltete Instanz

Gibt Informationen zu Abfragen zurück, die einen fehlenden Index aus Gruppen fehlender Indizes benötigten, ohne räumliche Indizes. Pro fehlender Indexgruppe können mehrere Abfragen zurückgegeben werden. Eine fehlende Indexgruppe enthält möglicherweise mehrere Abfragen, die denselben Index benötigten.

In Azure SQL-Datenbank können dynamische Verwaltungsansichten keine Informationen verfügbar machen, die sich auf das Eindämmen von Datenbanken auswirken oder Informationen zu anderen Datenbanken verfügbar machen, auf die der Benutzer zugreifen kann. Um diese Informationen nicht verfügbar zu machen, wird jede Zeile mit Daten, die nicht zum verbundenen Mandanten gehören, herausgefiltert.

Spaltenname Datentyp Beschreibung
group_handle int Identifiziert eine Gruppe fehlender Indizes. Dieser Bezeichner ist innerhalb des Servers eindeutig.

Die anderen Spalten stellen Informationen zu allen Abfragen bereit, für die der Index in der Gruppe als fehlend betrachtet wird.

Eine Indexgruppe enthält nur einen Index.

Kann in sys.dm_db_missing_index_groups eingebunden index_group_handle werden.
query_hash binary(8) Binärer Hashwert, der in der Abfrage berechnet wird und zum Identifizieren von Abfragen mit ähnlicher Logik verwendet wird. Sie können den Abfragehash verwenden, um die aggregierte Ressourcennutzung für Abfragen zu ermitteln, die sich nur durch Literalwerte unterscheiden.
query_plan_hash binary(8) Binärer Hashwert, der im Abfrageausführungsplan wird und zum Identifizieren ähnlicher Abfrageausführungspläne verwendet wird. Sie können diesen Abfrageplan-Hashwert verwenden, um die kumulierten Kosten für Abfragen mit ähnlichen Ausführungsplänen zu suchen.

Ist immer 0x000, wenn eine systemintern kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt.
last_sql_handle varbinary(64) Ist ein Token, das den Batch oder die gespeicherte Prozedur der letzten kompilierten Anweisung identifiziert, die diesen Index benötigt.

Dies last_sql_handle kann verwendet werden, um den SQL-Text der Abfrage abzurufen, indem die dynamische Verwaltungsfunktion sys.dm_exec_sql_text aufgerufen wird.
last_statement_start_offset int Gibt in Bytes beginnend mit 0 die Anfangsposition der Abfrage an, die die Zeile im Text des Batches oder beibehaltenen Objekts für die letzte kompilierte Anweisung beschreibt, die diesen Index in seinem SQL-Batch benötigt.
last_statement_end_offset int Gibt in Bytes beginnend mit 0 die Endposition der Abfrage an, die die Zeile innerhalb des Texts des Batches oder des dauerhaften Objekts für die letzte kompilierte Anweisung beschreibt, die diesen Index in seinem SQL-Batch benötigt.
last_statement_sql_handle varbinary(64) Ist ein Token, das den Batch oder die gespeicherte Prozedur der letzten kompilierten Anweisung identifiziert, die diesen Index benötigt. Wird von Abfragespeicher verwendet. Im Gegensatz dazu last_sql_handlesys.query_store_query_text verweist die Abfragespeicher Katalogansicht auf die statement_sql_handle sys.query_store_query_text.

Wenn Abfragespeicher beim Kompilieren der Abfrage nicht aktiviert wurde, wird 0 zurückgegeben.
user_seeks bigint Die Anzahl von durch Benutzerabfragen verursachten Suchvorgängen, für die der empfohlene Index in der Gruppe hätte verwendet werden können.
user_scans bigint Die Anzahl von durch Benutzerabfragen verursachten Scanvorgängen, für die der empfohlene Index in der Gruppe hätte verwendet werden können.
last_user_seek datetime Das Datum und die Uhrzeit des letzten durch Benutzerabfragen verursachten Suchvorgangs, für den der empfohlene Index in der Gruppe hätte verwendet werden können.
last_user_scan datetime Das Datum und die Uhrzeit des letzten durch Benutzerabfragen verursachten Scanvorgangs, für den der empfohlene Index in der Gruppe hätte verwendet werden können.
avg_total_user_cost float Die durchschnittlichen Kosten der Benutzerabfragen, die durch den Index in der Gruppe reduziert werden könnten.
avg_user_impact float Durchschnittlicher prozentualer Nutzen, der für Benutzerabfragen entstünde, wenn diese Gruppe fehlender Indizes implementiert würde. Der Wert bedeutet, dass die Abfragekosten durchschnittlich um diesen Prozentsatz verringert würden, wenn diese Gruppe fehlender Indizes implementiert würde.
system_seeks bigint Die Anzahl von durch Systemabfragen, beispielsweise Auto Stats-Abfragen, verursachten Suchvorgängen, für die der empfohlene Index in der Gruppe hätte verwendet werden können. Weitere Informationen finden Sie unter Auto Stats-Ereignisklasse.
system_scans bigint Die Anzahl von durch Systemabfragen verursachten Scanvorgängen, für die der empfohlene Index in der Gruppe hätte verwendet werden können.
last_system_seek datetime Das Datum und die Uhrzeit des letzten durch Systemabfragen verursachten Systemsuchvorgangs, für den der empfohlene Index in der Gruppe hätte verwendet werden können.
last_system_scan datetime Das Datum und die Uhrzeit des letzten durch Systemabfragen verursachten Systemscanvorgangs, für den der empfohlene Index in der Gruppe hätte verwendet werden können.
avg_total_system_cost float Die durchschnittlichen Kosten der Systemabfragen, die durch den Index in der Gruppe reduziert werden könnten.
avg_system_impact float Durchschnittlicher prozentualer Nutzen, der für Systemabfragen entstünde, wenn diese Gruppe fehlender Indizes implementiert würde. Der Wert bedeutet, dass die Abfragekosten durchschnittlich um diesen Prozentsatz verringert würden, wenn diese Gruppe fehlender Indizes implementiert würde.

Hinweise

Von jeder Abfrageausführung zurückgegebene sys.dm_db_missing_index_group_stats_query Informationen werden aktualisiert, nicht durch jede Abfragekompilierung oder Neukompilierung. Nutzungsstatistiken werden nicht beibehalten und werden nur beibehalten, bis das Datenbankmodul neu gestartet wird.

Datenbankadministratoren sollten regelmäßig Sicherungskopien der Informationen zu fehlenden Indizes erstellen, wenn Sie die Verwendungsstatistiken nach dem Wiederverwenden des Servers beibehalten möchten. Verwenden Sie die sqlserver_start_time-Spalte in sys.dm_os_sys_info, um die aktuellste Startzeit der Datenbank-Engine zu suchen. Sie können auch fehlende Indizes mit Abfragespeicher beibehalten.

Hinweis

Das Resultset für diesen DMV ist auf 600 Zeilen beschränkt. Jede Zeile enthält einen fehlenden Index. Wenn mehr als 600 Indizes fehlen, sollten Sie die vorhandenen fehlenden Indizes adressieren, damit Sie die neueren anzeigen können.

Berechtigungen

Zum Abfragen dieser dynamischen Verwaltungssicht muss den Benutzern die VIEW SERVER STATE-Berechtigung oder eine Berechtigung, die die VIEW SERVER STATE-Berechtigung impliziert, erteilt werden.

Berechtigungen für SQL Server 2022 und höher

Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.

Beispiele

Die folgenden Beispiele veranschaulichen die Verwendung der sys.dm_db_missing_index_group_stats_query dynamischen Verwaltungsansicht.

A. Suchen des neuesten Abfragetexts für die höchsten 10 erwarteten Verbesserungen für Benutzerabfragen

Die folgende Abfrage gibt den letzten aufgezeichneten Abfragetext für die 10 fehlenden Indizes zurück, die die höchste erwartete kumulative Verbesserung in absteigender Reihenfolge erzeugen würden.

SELECT TOP 10 
    SUBSTRING
    (
            sql_text.text,
            misq.last_statement_start_offset / 2 + 1,
            (
            CASE misq.last_statement_start_offset
                WHEN -1 THEN DATALENGTH(sql_text.text)
                ELSE misq.last_statement_end_offset
            END - misq.last_statement_start_offset
            ) / 2 + 1
    ),
    misq.*
FROM sys.dm_db_missing_index_group_stats_query AS misq
CROSS APPLY sys.dm_exec_sql_text(misq.last_sql_handle) AS sql_text
ORDER BY misq.avg_total_user_cost * misq.avg_user_impact * (misq.user_seeks + misq.user_scans) DESC; 

Nächste Schritte

Weitere Informationen zu den fehlenden Indexfeatures und verwandten Konzepten finden Sie in den folgenden Artikeln: